堆排序具有合并排序(时间复杂度O(nlgn)低)和插入排序(空间消耗少)的优点。
#include<stdio.h> #include<stdlib.h> #include<math.h> #include<time.h> #define MAX 10 int size; int MAX_Heapify(int A[],int i) { int l,r,largest; l = i*2+1; r = i*2 + 2; if(l < size && A[l] > A[i]) largest = l; else largest = i; if(r < size && A[r] > A[largest]) largest = r; if(largest != i) { int tmp = A[i]; A[i] = A[largest]; A[largest] = tmp; MAX_Heapify(A,largest); } return 0; } int build_heap(int A[]) { int i; for(i = (size-1)/2;i>=0;i--) MAX_Heapify(A,i); return 0; } int heap_sort(int A[]) { int i,tmp; build_heap(A); for(i = size-1;i>0;i--) { tmp = A[0]; A[0] = A[i]; A[i]=tmp; size--; MAX_Heapify(A,0); } return 0; } int test() { int a[10],i; for(i = 0;i<10;i++) { a[i] = rand(); printf("%d ",a[i]); } size = sizeof(a)/sizeof(int); heap_sort(a); size = sizeof(a)/sizeof(int); for(i=0;i<MAX;i++) printf("%d ",a[i]); return 0; } int main() { test(); return 0; }