根据严蔚敏老师版本的数据结构一书,实现的代码,经编译成功。
#include<iostream>
using namespace std;
void HeapSort(int a[],int size);//
void HeapAdjust(int a[],int start,int length);
void createHeap(int a[],int size);
int main()
{
int a[10]={71,18,151,138,160 ,63 ,174, 169 ,79 ,78};
for(int i=0;i<10;i++){
cout<<a[i]<<" ";
}
cout<<endl;
cout<<"After sorting the heap.............."<<endl;
HeapSort(a,10);
for(int i=0;i<10;i++)
{
cout<<a[i]<<" ";
}
return 0;
}
void HeapAdjust(int a[],int start,int length)
{ if(length==0){
return;
}
int rc=a[start];
for(int i=2*start;i<=(length-1);i=i*2)
{ //找到下面最大的结点
if(i+1<=(length-1)&&a[i]<a[i+1])
{
i++;
}
if(rc>a[i]) break;
a[start]=a[i];start=i;//再从这个点进行堆调整
}
a[start]=rc;
}
void createHeap(int a[],int size)
{
for(int i=size/2;i>=0;i--)
{
HeapAdjust(a,i,size);
}
}
void HeapSort(int a[],int size)
{
createHeap(a,size);
int tmp;
for(int i=size-1;i>1;i--)
{
tmp=a[0];
a[0]=a[i];
a[i]=tmp;
HeapAdjust(a,0,i);
}
tmp=a[0];
a[0]=a[1];
a[1]=tmp;
}
编译的结果如下: