#include <iostream> #include <ctime> #include <cstdlib> using namespace std; void Swap(int *x,int *y) { int iTemp; iTemp = *x; *x = *y; *y = iTemp; } void MaxHeapify(int A[], int i,int heapsize) { int left; int right; int largest; if (i > (heapsize-2)/2) return; left = 2*i+1; right = 2*(i+1); if (left < heapsize && A[left] > A[i]) largest = left; else largest = i; if (right < heapsize && A[right] > A[largest]) largest = right; if (largest != i) { Swap(&A[largest],&A[i]); MaxHeapify(A,largest,heapsize); } } void BuildMaxHeap(int A[], int n) { int iCnt; for (iCnt = (n-1)/2; iCnt >= 0;--iCnt) MaxHeapify(A,iCnt,n); } void HeapSort(int A[],int n) { int iCnt; int iHeapSize; iHeapSize = n; BuildMaxHeap(A,n); for (iCnt = n-1; iCnt >=1; --iCnt) { Swap(&A[0],&A[iCnt]); --iHeapSize; MaxHeapify(A,0,iHeapSize); } } int main() { int i; int A[10]; srand(time(NULL)); for (i = 0; i < 10; ++i) { A[i] = rand() % 20; printf("%d ",A[i]); } printf("/n"); HeapSort(A,10); for (i = 0; i < 10; ++i) printf("%d ",A[i]); printf("/n"); return 0; }