1015: 堆排序算法
题目描述

编写程序堆排序算法。按照从小到大的顺序进行排序,测试数据为整数。
输入

第一行是待排序数据元素的个数; 第二行是待排序的数据元素。(提示:用小根堆)

输出

一趟堆排序的结果。

样例输入

10
50 36 41 19 23 4 20 18 12 22

样例输出

4 12 20 18 22 41 50 36 19 23

#include<stdio.h>void swap(int a[],int max,int i)
{int temp=a[i];a[i]=a[max];a[max]=temp;
}void heapify(int tree[],int n,int i)
{//参数为数组tree,数组长度n,i是当前子树的根节点 if(i>=n)   return;//递归出口 int lc=2*i+1;int rc=2*i+2;int min=i;//找到当前节点左右子树的最大值并与当前节点交换 if(lc<n&&tree[lc]<tree[min]){min=lc;}if(rc<n&&tree[rc]<tree[min]){min=rc;}if(min!=i){swap(tree,min,i);heapify(tree,n,min);//对被交换的子树进行排序 }} void build_heap(int tree[],int n)
{//从最后一个节点的父节点开始创建最大堆,直到遇到根节点 int last_node=n-1;int parent=(last_node-1)/2;//最后一个节点的父节点 for(int i=parent;i>=0;i--){heapify(tree,n,i);}
}void heap_sort(int tree[],int n)
{//先构建一个最大堆 build_heap(tree,n);int i;//最后一个节点和根节点交换,并将最后一个节点砍掉 for(int i=n-1;i>=0;i--){swap(tree,i,0);heapify(tree,i,0);//i表示当前树的节点 }
}
int main()
{int n;scanf("%d",&n);int tree[n];for(int i=0;i<n;i++){scanf("%d",&tree[i]);} build_heap(tree,n);for(int i=0;i<n;i++){printf("%d ",tree[i]);}
}

b站大佬讲解视频

https://www.bilibili.com/video/BV1Eb41147dK?from=search&seid=7761090493431357921

swust.oj1015: 堆排序算法相关推荐

  1. SWUST OJ 1015: 堆排序算法

    1015: 堆排序算法 题目描述 编写程序堆排序算法.按照从小到大的顺序进行排序,测试数据为整数. 输入 第一行是待排序数据元素的个数: 第二行是待排序的数据元素.(提示:用小根堆) 输出 一趟堆排序 ...

  2. 上标3下标6算法_图解堆排序算法

    堆排序定义 一般来说,算法就像数学公式,前人经过不断优化和验证得到有规律性的公式留给后人使用,当然也会交给后人验证的思路.那么堆排序算法就是这样,它有基本固定的定义如下: 1.将数组构建为一颗有规则的 ...

  3. 9个元素换6次达到排序序列_一文带你读懂排序算法(三):堆排序算法

    国庆节快乐~点击上方文字关注我们哦 堆是一种特殊的树形数据结构,其每一个结点都有一个值,通常提到的堆都是指一棵完全二叉树,根结点的值小于(或大于)两个子结点的值,同时,根结点的两个子树也分别是一个堆. ...

  4. 精通八大排序算法系列:二、堆排序算法

    精通八大排序算法系列:二.堆排序算法 作者:July .二零一一年二月二十日 本文参考:Introduction To Algorithms,second edition. ------------- ...

  5. 堆排序时间复杂度_堆排序算法

    堆排序是指利用堆积树这种数据结构所设计的一种排序算法,它是选择排序的一种.可以利用数组的特点快速定位指定索引的元素.堆是一个优先级队列,对于大顶堆而言,堆顶元素的权值最大.将待排序的数组建堆,然后不断 ...

  6. 【java排序】 归并排序算法、堆排序算法

    一.归并排序算法 基本思想: 归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的.然后再把有序子序列合并为整体有序序列. 归并 ...

  7. JavaScript实现heapsort堆排序算法(附完整源码)

    JavaScript实现heapsort堆排序算法(附完整源码) Heap.js完整源代码 MinHeap.js完整源代码 Comparator.js完整源代码 Sort.js完整源代码 HeapSo ...

  8. 经典排序算法(7)——堆排序算法详解

    堆排序(Heap sort)是指利用堆(最大堆.最小堆)这种数据结构所设计的一种排序算法.堆是一个完全二叉树的结构,并同时满足如下性质:即子结点的键值或索引总是小于(或者大于)它的父节点. 一.算法基 ...

  9. java 实现 堆排序算法_C程序实现堆排序算法

    java 实现 堆排序算法 Heap Sort is a comparison-based sorting algorithm that makes use of a different data s ...

最新文章

  1. PYTHON 写函数,检查传入列表的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者...
  2. HDU 1425 sort(堆排序)
  3. session和Cookie的区别
  4. Linux 运维故障排查思路,有这篇文章就够了
  5. python做股票系统_GitHub - hetingqin/stock: stock,股票系统。使用python进行开发。
  6. hosts文件是什么?
  7. sys/queue.h分析(图片复制不过来,查看原文)
  8. yum mysql 5.1 innodb_Yum升级mysql5.1到5.6
  9. vxworks 调式
  10. 二叉树、多叉树子路径遍历
  11. 【转】Javabyte[]数组和十六进制String之间的转换Util------包含案例和代码
  12. AttributeError: module ‘torch.onnx‘ has no attribute ‘set_training‘
  13. 微信安装包 11 年膨胀 575 倍?QQ安装包800M?谁在抢你的手机内存?
  14. 穷举查找之旅行商问题、背包问题、分配问题
  15. mysql blast2go_blast2go本地化教程
  16. Unable to open JDBC Connection for DDL execution
  17. 《勋伯格和声学》读书笔记(十一):相隔三个和四个循环五度的转调
  18. 记一次AWK程序耗时日志分析
  19. 论文写作——如图所示
  20. 万事无忧之SEO GOOGLE优化秘诀

热门文章

  1. RegularExpression
  2. android rename to(file)方法失败
  3. splay tree java_伸展树(splay tree)自顶向下的算法
  4. mysql s授权所有用户_Mysql添加用户并授权
  5. OA系统二十:请假审批一:审批功能概述;显示【请假审批】这个内嵌界面中【待审批请假数据】的SQL语句;
  6. TM域名与商标域名有什么不同
  7. 高效准确地过滤Outlook垃圾邮件
  8. useradd: warning: the home directory already exists. Not copying any file from skel directory intoit
  9. 按规律摆放红蓝花盆(python)实现
  10. 软件架构师-历年论文要点-2013+2018