博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
堆排序
阅读量:5167 次
发布时间:2019-06-13

本文共 1037 字,大约阅读时间需要 3 分钟。

堆排序

利用到完全二叉树的有关知识,时间复杂度O(nlogn)

#include
#include
#include
#include
using namespace std;const int MAX_A = 100009;//使1到n元素为最大堆void Adjust(int a[],int i,int n){ int l=2*i, r=2*i+1; int maxi=i; //父亲是否比孩子大 if(l<=n&&a[l]>a[maxi]) maxi=l; if(r<=n&&a[r]>a[maxi]) maxi=r; if(maxi!=i) { //交换 swap(a[i],a[maxi]); //保证调整以后以maxi为父节点的子树也为最大堆 Adjust(a,maxi,n); }}void Build(int a[],int n){ //建大顶堆,从有叶子节点那一层的最大处开始 for(int i=n/2; i>=1; i--) Adjust(a,i,n);}void Heap_sort(int a[],int n){ Build(a,n); for(int i=n; i>1; i--) { swap(a[1],a[i]); //只需调整root节点即可 Adjust(a,1,i-1); }}int main(){ int a[MAX_A],n; while(~scanf("%d",&n)) { for(int i=1; i<=n; i++) scanf("%d",&a[i]); Heap_sort(a,n); for(int i=1; i<=n; i++) printf("%d ",a[i]); printf("\n"); }}

 

转载于:https://www.cnblogs.com/stffer/p/5046214.html

你可能感兴趣的文章
约瑟夫问题
查看>>
Arduino 报错总结
查看>>
树莓派Android Things物联网开发:树莓派GPIO引脚图
查看>>
矩阵快速幂---BestCoder Round#8 1002
查看>>
Hadoop HBase概念学习系列之HBase里的宽表设计概念(表设计)(二十七)
查看>>
awk变量
查看>>
mysql_对于DQL 的简单举例
查看>>
35. Search Insert Position(C++)
查看>>
[毕业生的商业软件开发之路]C#异常处理
查看>>
有关快速幂取模
查看>>
NOI2018垫底记
查看>>
注意java的对象引用
查看>>
C++ 面向对象 类成员函数this指针
查看>>
NSPredicate的使用,超级强大
查看>>
自动分割mp3等音频视频文件的脚本
查看>>
判断字符串是否为空的注意事项
查看>>
布兰诗歌
查看>>
js编码
查看>>
Pycharm Error loading package list:Status: 403错误解决方法
查看>>
steps/train_sat.sh
查看>>