SCAU 8644 堆排序
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/27ea495b7c30e55fa1476b6ef695f185.png)
#include <iostream>
using namespace std;
int n;
void HeapAdjust(int a[],int s,int m)
{
int c;
c=a[s];
for(int j=2*s;j<=m;j=j*2)
{
if(j<m&&a[j]<a[j+1])
j++;;
if(c>=a[j])
break;
a[s]=a[j];
s=j;
}
a[s]=c;
}
void CreatHeap(int a[])
{
int k=n;
for(int i=k/2;i>0;i--)
{
HeapAdjust(a,i,n);
}
}
void HeapSort(int a[])
{
CreatHeap(a);
int i;
for(i=n;i>1;i--)
{
int x;
x=a[1];
a[1]=a[i];
a[i]=x;
HeapAdjust(a,1,i-1);
for(int k=1;k<=n;k++)
{
printf("%d ",a[k]);
}
printf("\n");
}
}
int main()
{
scanf("%d",&n);
int a[n];
int i;
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
CreatHeap(a);
HeapAdjust(a,1,i-1);
for(int k=1;k<=n;k++)
{
printf("%d ",a[k]);
}
printf("\n");
HeapSort(a);
return 0;
}