//-------堆排序---------// void HeapAdjust(int *a, int i, int Length) { int Child; int Temp; for (Temp = a[i]; 2 * i + 1 < Length; i = Child) { Child = 2 * i + 1; if (Child < Length - 1 && a[Child + 1] > a[Child]) { ++Child; } if (Temp < a[Child]) { a[i] = a[Child]; } else { break; } a[Child] = Temp; } } void HeapSort(int *a, int length) { int i; int temp; for (i = length / 2 - 1; i >= 0; --i) { HeapAdjust(a, i, length); } for (i = length - 1; i > 0; --i) { temp = a[0]; a[0] = a[i]; a[i] = temp; HeapAdjust(a, 0, i); } } int main() { int *a; int i, length; int temp = 0; printf("input :"); scanf("%d",&length); a = (int*) malloc((length+1) * sizeof(int)); printf("input %d Numble :", length); for(i = 0; i < length; i++) { scanf(" %d", &a[i]); } HeapSort(a,length); for(i = 0; i < length; i++) { printf("%d ",a[i]); } printf("\n"); return 1; }