#include<bits/stdc++.h>
using namespace std;
const int N = 1000010;
int n;
int q[N],s[N],w[N];
void HeadAdjust(int q[],int k,int len)
{
q[0]=q[k];//暂时存放
for(int i=2*k;i<=len;i=i*2)
{
if(i<len && q[i]<q[i+1])
i++;
if(q[0]>=q[i]) break;
else
{q[k]=q[i];
k=i;
}
}
q[k]=q[0];
}
void HeapSort(int q[],int len)
{
for(int i=len/2;i>0;i--)
HeadAdjust(q,i,n);
for(int i=len;i>1;i--)
{
swap(q[i],q[1]);
HeadAdjust(q,1,i-1);
}
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
cin>>q[i];
HeapSort(q,n);
for(int i=1;i<=n;i++)
cout<<q[i]<<' ';
}
最坏,平均,最好均为O(nlogn)
稳定性:不稳定