#include<stdio.h> void AdjustHeap(int A[], int i, int n) { int j, tmp, tmpid; for( ; i * 2 + 1 < n; i++) { if(i * 2 + 2 >= n) { tmp = A[i * 2 + 1]; tmpid = i * 2 + 1; } else if (A[i * 2 + 1] > A[i * 2 + 2]) { tmp = A[i * 2 + 1]; tmpid = i * 2 + 1; } else { tmp = A[i * 2 + 2]; tmpid = i * 2 + 2; } if(tmp > A[i]) { A[tmpid] = A[i]; A[i] = tmp; } } } void MakeHeap(int A[], int n) { int i; for(i = n/2; i >= 0; i--) { AdjustHeap(A, i, n); } } void HeapSort(int A[], int n) { int i, tmp; for(i = 0; i < n; i++) { tmp = A[n - i - 1]; A[n - i - 1] = A[0]; A[0] = tmp; AdjustHeap(A, 0, n - i - 1); } } void main() { int A[] = {2, 4, 5, 6, 7, 8, 1, 3}; int n = 8; MakeHeap(A, n); int i; for(i = 0; i < n; i++) printf("%d ", A[i]); printf("\n"); HeapSort(A, n); for(i = 0; i < n; i++) printf("%d ", A[i]); printf("\n"); }
原文:http://blog.csdn.net/uj_mosquito/article/details/42712749