#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; }