#include <stdio.h>
#include <windows.h>
#include <stdint.h>
void BuildMaxHeap(int a[],int size);
void HeadAdjust(int a[],int k,int size);
void HeapSort(int a[],int size);
int main()
{
int k;
int num[9]={NULL,8,7,4,6,5,1,2,3};
int sortsize=sizeof(num)/sizeof(num[0]);
HeapSort(num,sortsize-1);
for(k=1;k<sortsize;k++)
printf("\n%d",num[k]);
system("pause");
return 0;
}
void BuildMaxHeap(int a[],int size)
{
int i;
for(i=size/2;i>0;i--)
HeadAdjust(a,i,size);
}
void HeadAdjust(int a[],int k,int size)
{
int i,j;
int temporary;
temporary=a[k];
for(i=2*k;i<=size;i*=2)
{
if(i<size&&a[i]<a[i+1])
i++;
if(temporary>=a[i])break;
else{
a[k]=a[i];
k=i;
}
}
a[k]=temporary;
}
void HeapSort(int a[],int size)
{
int i;
int temporary;
BuildMaxHeap(a,size);
for(i=size;i>1;i--)
{
temporary=a[i];
a[i]=a[1];
a[1]=temporary;
HeadAdjust(a,1,i-1);
}
}