CSDN今天上午抽风了,没能发出去。
重发:基于《算法导论》,下标从0开始的堆排序与堆结构的实现,在Ubuntu 12.04 LTS +GCC 4.6.3下调试通过。
#include <iostream> using namespace std; void swap(int &a,int &b) { int temp=a; a=b; b=temp; } void Max_Heapify(int a[],int heapsize,int i) { int l=2*i+1; int r=2*i+2; int largest; if(a[l]>a[i] && l<heapsize) { largest=l; } else largest=i; if(r<heapsize && a[r]>a[largest]) { largest=r; } if(largest!=i) { swap(a[i],a[largest]); Max_Heapify(a,heapsize,largest); } } void BuildMaxHeap(int a[],int &heapsize,int size) { heapsize=size; for(int i=(size-1)/2;i>=0;i--) { Max_Heapify(a,heapsize,i); } } void HeapSort(int a[],int size) { int heapsize; BuildMaxHeap(a,heapsize,size); for(int i=size-1;i>0;i--) { swap(a[i],a[0]); heapsize--; Max_Heapify(a,heapsize,0); } } int main() { int a[]={1,4,2,8,5,7,3,6,0,9}; HeapSort(a,10); for(int i=0;i<10;i++) cout<<a[i]<<endl; return 0; }