#include<iostream>
#include<cstdio>
using namespace std;
long long n,a[10000000];
void heapify(long long num,long long id)//维护大根堆堆性质,复杂度LogN
{
long long greatest=id,lson,rson;
lson=id*2+1;
rson=id*2+2;
if(lson<num&&a[lson]>a[id])greatest=lson;
if(rson<num&&a[rson]>a[id])greatest=rson;
if(greatest!=id)
{
swap(a[id],a[greatest]);
heapify(num,greatest);
}
}
void heap_sort()
{
for(long long i=n/2-1;i>=0;i--)
heapify(n,i);//建堆
//排序
for(long long i=n-1;i>=0;i--)
{
swap(a[0],a[i]);
heapify(i,0);
}
}
int main()
{
scanf("%lld",&n);
for(long long i=0;i<=n-1;i++)
scanf("%lld",&a[i]);
heap_sort();
for(long long i=0;i<=n-1;i++)
printf("%lld ",a[i]);
}
为啥只能过一个点