堆排序
//建堆
#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; }
// 排序输出
void solve(){ printf("%d ",a[1]); swap(a[1],a[n]); n--; update(1); }
//插入
void insert(int x){ a[++n]=x; int y=n; while(y<1){ int p=y/2; if(a[y]>a[p]){ swap(a[y],a[p]); y=p; } } }