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;
}