#include<stdio.h> #define LEFT(i) (2*(i)) #define RIGHT(i) (2*(i)+1) #define length 10 int A[length]={4,1,3,2,16,9,10,14,8,7}; int heapsize=length; void MAX_HEAPIFY(int*A,int i)//堆的维护 { int temp; int largest; int l=LEFT(i); int r=RIGHT(i); if(l<=heapsize&&A[l-1]>A[i-1]) largest=l; else largest=i; if(r<=heapsize&&A[r-1]>A[largest-1]) largest=r; if(largest!=i) { temp=A[i-1]; A[i-1]=A[largest-1]; A[largest-1]=temp; MAX_HEAPIFY(A,largest); } } void BUILD_MAX_HEAP(int*A)//建立最大堆 { int i=length/2; while(i>=1) { MAX_HEAPIFY(A,i); i--; } } void HEAPSORT(int*A)//堆排序 { int temp; BUILD_MAX_HEAP(A); int i=length; while(i>=1) { temp=A[i-1]; A[i-1]=A[0]; A[0]=temp; heapsize--; MAX_HEAPIFY(A,1); i--; } } void PRINTALL(int*A)//打印排序结果 { int i=1; while(i<=length) { printf("%d\t",A[i-1]); i++; } printf("\n"); } int main(void) { HEAPSORT(A); PRINTALL(A); return 0; }
原文:http://www.cnblogs.com/knowanddo/p/4864358.html