HeapSort
2013-10-22 11:19
309 查看
void HeapAdjust(int a[], int n, int i) { int l = 2*i + 1; int r = l + 1; int largest = i; if (l < n && a[l] > a[i]) { largest = l; } if (r < n && a[r] > a[largest]) { largest = r; } if (largest != i) { int t = a[largest]; a[largest] = a[i]; a[i] = t; HeapAdjust(a, n, largest); } } void HeapBuild(int a[], int n) { for (int i = n/2 - 1; i >= 0; i--) { HeapAdjust(a, n, i); } } void HeapSort(int a[], int n) { HeapBuild(a, n); for (int i = (n-1); i > 0; i--) { int t = a[i]; a[i] = a[0]; a[0] = t; HeapAdjust(a, i, 0); } } void Test(void) { int a[5] = {1, 9, 2, 4, 3}; HeapSort(a, 5); for (int i = 0; i < 5; i++) { printf("%d ", a[i]); } printf("\n"); system("pause"); }