严蔚敏数据结构P282 代码与P281图示不符 应改为如下 #include <stdio.h> #include <stdlib.h> int a[] = {49, 38, 65, 97, 76, 13, 27, 49}; void HeapAdjust(int *a, int s, int m) { int temp, i; temp = a[s]; for(i=2*s+1; i<=m; i=i*2+1) { if(i<m && a[i]>a[i+1]) //i为较小数的下标 严蔚敏数据结构P282 伪代码注释为“J为KEY较大的记录的下标” 应该为“J为KEY较小……” 相应的代码也应改正 i++; if(!(temp > a[i])) //书上此处的伪代码也是错的 break; a[s] = a[i]; s = i; } a[s] = temp; } void HeapSort(int *a, int size) { int i, temp; for(i=(size-1)/2; i>=0; i--) HeapAdjust(a, i, size-1); for(i=size-1; i>0; i--) { temp = a[0]; a[0] = a[i]; a[i] = temp; HeapAdjust(a, 0, i-1); } } int main() { int size, i; size = sizeof(a)/sizeof(int); HeapSort(a, size); for(i=0; i<size; i++) { printf("%d ", a[i]); } system("pause"); return 0; } 输出 : 97 76 65 49 49 38 27 13 改正后的程序测试正确,如哪位发现问题,望及时给予纠正:)