堆排序实现
参考算法导论 p73
#include<iostream> #include <algorithm> using namespace std void maxHeapify(int *a ,int i,int size) { int max=i; if(2*i<=size&&a[2*i]>a[max]) max = 2*i; if((2*i+1)<=size&&a[2*i+1]>a[max]) max = 2*i+1; if(max!=i) { swap(a[max],a[i]); maxHeapify(a,max,size); } } void buildMaxHeap(int *a,int size) { int i; for(i=size/2;i>=1;i--) maxHeapify(a,i,size); } void heapsort(int *a ,int size) { if(size<=1) return; buildMaxHeap(a,size); swap(a[1],a[size]); heapsort(a,size-1); } void main() { int a[200]; int i; for(i=1;i<=100;i++) a[i]=rand(); heapsort(a,100); for(i=1;i<=100;i++) printf("%d\n",a[i]); }
posted on 2012-12-11 17:36 luckistmaomao 阅读(163) 评论(0) 编辑 收藏 举报