void HeapAdjust(int data[], int low, int high) { int i = low; int tmp, tmphigh; while(2*i <= high) { if(2*i+1 <= high) { if(data[i]>=data[2*i] && data[i]>=data[2*i+1]) break; tmphigh = data[2*i]>data[2*i+1]?(2*i):(2*i+1); } else { if(data[i]>=data[2*i]) break; tmphigh = 2*i; } tmp = data[i]; data[i] = data[tmphigh]; data[tmphigh] = tmp; i = tmphigh; } } void HeapSort(int data[],int low, int high) { int i, tmp; for(i = (high - low) / 2; i >= 0; i--) { HeapAdjust(data, i, high); } for(i = high; i > low; i--) { tmp=data[low]; data[low]=data[i]; data[i]=tmp; HeapAdjust(data, low, i-1); } } 测试主程序 int main(int argc, char *argv[]) { int a[]={49, 38, 65, 97, 76, 13, 27, 49}; int length = sizeof(a)/sizeof(int); HeapSort(a, 0, length-1); for(int i = 0; i < length; i++) cout << a[i] << ' '; cout << endl; return 0; }