#include <iostream>
using namespace std;
void HeapAdjust(int *A, int s, int m) //下标以1开始
{
int temp_first=A[s];
for(int j=2*s;j<=m;j*=2)
{
if(j+1<=m && A[j]<A[j+1]) ++j;
if(temp_first>=A[j]) break;
A[s]=A[j];
s=j;
}
A[s]=temp_first;
}
void HeapSort(int *A, int len)
{
for(int i=len/2;i>=1;--i)
{
HeapAdjust(A, i, len);
}
int temp_first=A[1];
A[1]=A[len];
A[len]=temp_first;
for(int i=len-1;i>1;--i)
{
HeapAdjust(A,1,i);
temp_first=A[1];
A[1]=A[i];
A[i]=temp_first;
}
}
int main()
{
int A[]={0,2,4,6,2,45,8,5,3,8,4,6,7};
int len=sizeof(A)/sizeof(A[0])-1; //第一个元素是哨岗元素
HeapSort(A,len);
for(int i=1;i<=len;++i)
{
cout<<A[i]<<" ";
}
cout<<endl;
return 0;
}