堆排序
2015-12-14 19:05
351 查看
堆排序
利用到完全二叉树的有关知识,时间复杂度O(nlogn)
利用到完全二叉树的有关知识,时间复杂度O(nlogn)
#include<cstdio> #include<cstring> #include<cmath> #include<iostream> 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"); } }
相关文章推荐
- Linux增加系统调用
- HQL语法与详细解释[整理]
- 每个人都有自己的机缘,看别人的风景,品自己的人生!
- cubieboard apt-get 软件安装不了
- wordcloud(词云)
- 小马哥----高仿机部分6735芯片机型的root方法浅析 高仿三星Galaxy S6 A228_4G刷机root
- centOS6.4 oracle11g RAC搭建
- 字符串答疑
- 第八周项目1 建立顺序串的算法库
- More Effective C++ 第一部分 基础议题
- HashMap数据类型使用注意
- 获取鼠标的坐标位置
- Apache HTTP Client Removal
- 继承构造器答疑
- HDU 1054 Strategic Game 二分图最小点覆盖
- 解决帐号同步登陆问题,也即平滑登陆问题。
- 判断浏览器类型
- 战神Z7 D2安装黑苹果OS X El Capitan 10.11.2
- 深入分析JavaWeb Item18 -- JavaWeb的两种常用开发模式
- 【openjudge】拯救行动