#include <stdio.h>
void sift(int a[],int low,int high){
int i=low,j=2*i+1;
int temp=a[i];
while(j<=high){
if(j<high && a[j]<a[j+1]){
++j;
}
if(temp<a[j]){
a[i]=a[j];
i=j;
j=2*i+1;
}else{
break;
}
}
a[i]=temp;
}
void heapSort(int a[],int n){
for(int i=n/2-1;i>=0;--i){
sift(a,i,n-1);
}
printf("构造后的大根堆为:");
printSort(a,n);
printf("\n");
printf("从大到小依次为:");
for(int i=n-1;i>=0;--i){
int temp=a[0];
a[0]=a[i];
a[i]=temp;
sift(a,0,i-1);
printf("%d ",a[i]);
}
}
void printSort(int a[],int n){
for(int i=0;i<n;++i){
printf("%d ",a[i]);
}
}
int main () {
int a[]={2,9,7,6,5,8};
int n=sizeof(a)/sizeof(a[0]);
heapSort(a,n);
return 0;
}