P231 10.3.2 堆排序 完整源文件
#include<stdio.h>
typedef int KeyType;
typedef struct
{
KeyType key;
}DataType;
void CreatHeap(DataType a[],int n,int h)
{
int i,j,flag;
DataType temp;
i=h;
j=2*i+1;
temp=a[i];
flag=0;
while(j<n&&flag!=1)
{
if(j<n-1&&a[j].key<a[j+1].key)
j++;
if(temp.key>a[j].key)
flag=1;
else
{
a[i]=a[j];
i=j;
j=2*i+1;
}
}
a[i]=temp;
}
void InitCreatHeap(DataType a[],int n)
{
int i;
for(i=(n-1)/2;i>=0;i--)
CreatHeap(a,n,i);
}
void HeapSort(DataType a[],int n)
{
int i;
DataType temp;
InitCreatHeap(a,n);
for(i=n-1;i>0;i--)
{
temp=a[0];
a[0]=a[i];
a[i]=temp;
CreatHeap(a,i,0);
}
}
int main()
{
DataType test[8]={10,50,32,5,76,9,40,88};
int i,n=8;
HeapSort(test,n);
for(i=0;i<n;i++)
printf("%d ",test[i].key);
return 0;
}