时间复杂度 nlogn
#include <stdio.h>
#include <stdlib.h>
void Heapify(int tree[],int n,int i)
{
if(i>=n) return;
int c1,c2,max,temp;
c1=2*i+1;
c2=2*i+2;
max=i;
if(c1<n&&tree[c1]>tree[max])
{
max=c1;
}
if(c2<n&&tree[c2]>tree[max])
{
max=c2;
}
if(max!=i)
{
temp=tree[i];
tree[i]=tree[max];
tree[max]=temp;
Heapify(tree,n,max);
}
}
void BuildHeap(int tree[],int n)
{
int end=n-1,i;
int parent=(end-1)/2;
for(i=parent;i>=0;i--)
{
Heapify(tree,n,i);
}
}
void HeapSort(int tree[],int n)
{
BuildHeap(tree,n);
int i,temp;
for(i=n-1;i>=0;i--)
{
temp=tree[0];
tree[0]=tree[i];
tree[i]=temp;
Heapify(tree,i,0);
}
}
int main()
{
int num[5]= {2,3,1,5,4};
HeapSort(num,5);
for(int i=0; i<5; i++)
{
printf("%d\n",num[i]);
}
return 0;
}