堆排序
Posted Code_Together
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了堆排序相关的知识,希望对你有一定的参考价值。
//建堆
#include <cstdio> #include <iostream> using namespace std; int n,a[110]; void update(int o){ int l=o<<1,r=o<<1|1,maxn; if(l<=n && a[l]>a[o])maxn=l; else maxn=o; if(r<=n && a[r]>a[maxn])maxn=r; if(maxn!=o){ swap(a[o],a[maxn]); update(maxn); } } void init(){ for(register int i=n/2;i;i--)update(i); } int main(){ scanf("%d",&n); for(register int i=1;i<=n;i++)scanf("%d",&a[i]); init(); for(register int i=1;i<=n;i++)printf("%d ",a[i]); return 0; }
以上是关于堆排序的主要内容,如果未能解决你的问题,请参考以下文章