#include <iostream>
using namespace std;
//调整堆
void HeadAdjust(int A[],int k, int len){
A[0]=A[k];
for (int i=2*k;i<=len;i*=2){
if(i<len&&A[i]<A[i+1]){
i++;
}
if(A[0]>=A[i]) break;
else{
A[k]=A[i];
k=i;
}
}
A[k]=A[0];
}
//建立堆
void CreateHeap(int A[],int len){
for (int i=len/2;i>0;i--){
HeadAdjust(A,i,len);
}
}
//堆排序
void HeapSort(int A[],int len){
CreateHeap(A,len);
for (int i=len;i>0;i--){
cout<<A[1]<<" ";
swap(A[i],A[1]);
HeadAdjust(A,1,i-1);
}
}
int main(){
int x;
int A[]={x,99,8,9,6,2,7};//x相当于一个哨兵
HeapSort(A,6);
return 0;
}
赶快去试一下吧,如有疑问请留言。