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

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

<pre name="code" class="cpp"><pre name="code" class="cpp">/**堆排序*/ /**顺序表存储*/ #include<cstdio> #include<algorithm> #define LT(a,b) ((a)<(b)) using namespace std; int a[]={9,5,2,1,3,4,6,8,9,10}; int n=5; void f(int s,int m){ /**使a[s...m]成为一个大顶堆*/ int c = a[s]; for(int j=2*s; j<=m; j*=2){ /**沿key较大的孩子节点向下筛选*/ if(j < m && LT(a[j],a[j+1])) ++j; /**j为key较大记录的下标*/ if(!LT(c,a[j])) break; /**rc应插入在位置s上*/ a[s]=a[j]; s=j; } a[s]=c;

}

void Hs(){ /**把a[1...n]建成大顶堆*/ for(int i=n/2; i>0; --i) f(i,n); for(int i=n;i>1;--i){ swap(a[1],a[i]); /**把堆顶最大的和最后一个交换*/ f(1,i-1); /**将a[1,i-1]又一次调整为大顶堆*/ } } int main() { Hs(); for(int i=1;i<=5;i++) printf("%d ",a[i]); return 0;

}

本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/5395863.html,如需转载请自行联系原作者

你可能感兴趣的文章
Python面向对象之类的成员
查看>>
[一文一命令]more命令详解
查看>>
mapreduce运行机制
查看>>
netstat 命令详解
查看>>
网络I/O模型
查看>>
javascript深度理解数组排序
查看>>
关于map.put()方法,报java.lang.NullPointerException空指针异常
查看>>
linux下SSH远程连接服务慢解决方案
查看>>
【未完】mongodb安装+副本集搭建+数据导入
查看>>
ssh连接慢(DNS惹的祸)
查看>>
linux时间服务器 ntp ntpdate
查看>>
2012年最好的10个HTML5网站
查看>>
老男孩教育每日一题-2017-04-18:命令风暴:如何快速删除Linux中海量小文件?
查看>>
老男孩教育每日一题-第125天-显示文件oldboy.txt的第20行到30行请问如何做?
查看>>
nginx bind() to 0.0.0.0:**** failed (13: Permission denied)
查看>>
Activiti 入门示例
查看>>
10.fabric-java-sdk使用联接池后长时间,报UNAVAILABLE问题处理
查看>>
Tomcat的负载均衡(apache的mod_jk来实现)
查看>>
Win8上iis配置
查看>>
Confluence 6 配置 Office 转换器
查看>>