您的位置:首页 > 其它

算法导论 堆排序

2017-04-06 16:47 190 查看
#include <stdio.h>
#include <limits.h>

void MaxHeapify(int a[],int i,int len)
{
int l=i*2,r=i*2+1;
int largest=i;
while(l<=len || r<=len)
{
if(l<=len && a[l]>a[i])
{
largest=l;
}
if(r<=len && a[r]>a[largest])
{
largest=r;
}
if(largest != i)
{
int temp=a[i];
a[i]=a[largest];
a[largest]=temp;
i=largest;
}
else
break;
l=i*2,r=i*2+1;
}
}

void printA(int a[],int len)
{
for(int i=1;i<=len;i++)
{
printf("%d ",a[i]);
}
}

void buildMaxHeap(int a[],int len)
{
for(int i=len/2;i>=1;i--)
{
MaxHeapify(a,i,len);
}
}

void heapSort(int a[],int len)
{
buildMaxHeap(a,len);
int i;
for(i=len;i>=2;i--)
{
int temp=a[i];
a[i]=a[1];
a[1]=temp;
MaxHeapify(a,1,i-1);
}
}

void main()
{
int a[15]={INT_MAX,27,17,3,16,13,10,1,5,7,12,4,8,9,0};
heapSort(a,14);
printA(a,14);
getchar();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: