//堆排序
#include<iostream>
#define MAX 100
using namespace std;
void display(int a[],int n);
void silt(int a[],int n,int m)
{
int t;
t=a[m];
int j=2*(m+1)-1;
// display(a,n);
while(j<=n)
{
while(j<n && a[j]<a[j+1])//=
j++;
if(t<a[j])
{
a[m]=a[j];
m=j;
j=2*(j+1)-1;
}
else
j=n+1;
}
a[m]=t;
display(a,n);
}
void ssort(int a[],int n)
{
int m=n/2;
for(int i=m-1;i>=0;i--)
{
silt(a,n-1,i);
}
for(int i=n-1;i>=0;i--)
{
int temp=a[0];a[0]=a[i];a[i]=temp; //把最小的放到尾部。
silt(a,i-1,0);
}
}
void display(int a[],int n)
{
for(int i=0;i<=n;i++)
{
// cout<<"a["<<i<<"]="<<a[i]<<" ";
cout<<a[i]<<" ";
}
cout<<endl;
}
int main()
{
int a[]={2,8,3,6,9,5,1,4,0,7};
int n=10;
ssort(a,n);
// silt(a,n,(n/2));
display(a,n);
return 0;
}