标签:using 堆排 pac swa 堆排序 cpp main upd reg
//建堆
#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;
}
标签:using 堆排 pac swa 堆排序 cpp main upd reg
原文地址:http://www.cnblogs.com/codetogether/p/7755023.html