#include<stdio.h>
#include<math.h>
void buildMaxHeap(int a[],int n,bool flag)
{
int N=n+1;
int h=(int)ceil((log(N)/log(2)))-1;
for(int i=1;i<=h;i++)
{
for(int j=1;j<=n/2;j++)
{
int t=2*j;
if(t+1<=n)
{
if(a[t]<a[t+1]) t++;
if(a[j]<a[t])
{
int temp=a[j];
a[j]=a[t];
a[t]=temp;
}
}
else if(t+1>n)
{
if(a[j]<a[t])
{
int temp=a[j];
a[j]=a[t];
a[t]=temp;
}
}
}
if(flag==false) break;
}
}
void HeapSort(int a[],int n)
{
int N=n;
buildMaxHeap(a,N,true);
int temp;
for(int i=n;i>=2;i--)
{
temp=a[1];
a[1]=a[i];
a[i]=temp;
buildMaxHeap(a,--N,false);
}
}
void main()
{
int a[11]={0,6,8,7,9,0,1,3,2,4,5};
HeapSort(a,10);
for(int i=1;i<=10;i++)
{
printf("%d ",a[i]);
}
}
|
|