1 //大顶堆调整O(log n)
2 void maxHeapify(int A[],int heapSize,int i){
3 int lChild=2*i;
4 int rChild=2*i+1;
5 int largest=i;
6 if(lChild<=heapSize&&A[lChild]>A[largest])
7 largest=lChild;
8 if(rChild<=heapSize&&A[rChild]>A[largest])
9 largest=rChild;
10 if(largest!=i){
11 swap(A[largest],A[i]);
12 maxHeapify(A,heapSize,largest);
13 }
14 }
15 //建堆O(n)
16 void buildMaxHeap(int A[],int heapSize){
17 for(int i=heapSize/2;i>=1;i--)
18 maxHeapify(A,heapSize,i);
19 }
20 //堆排序O(n log n)
21 void heapSort(int A[],int heapSize){
22 buildMaxHeap(A,heapSize);
23 for(int i=heapSize;i>=2;i--){
24 swap(A[1],A[i]);
25 heapSize--;
26 maxHeapify(A,heapSize,1);
27 }
28 }