堆排序算法导论c实现
部分有序使用堆排序效率较高, 基本有序使用插入排序或冒泡排序效率较高
#include <stdio.h>
#include <stdlib.h>
//调整函数要求除了要调整的点,都要满足堆的性质
void maxheapify(int a[],int i,int length)
{
int left=2*i+1;
int right=2*i+2;
int largest=0;
int temp=0;
if(left<=length-1 && a[left]>a[i])
{
largest=left;
}
else
{
largest=i;
}
//取父节点、左右节点最大值
if(right <=length-1 && a[right]>a[largest])
largest=right;
if(largest!=i)
{
temp=a[largest];
a[largest]=a[i];
a[i]=temp;
maxheapify(a,largest,length);
}
}
void buildmaxheap(int a[],int length)
{
int i=0;
for(i=length/2-1;i>=0;--i)
{
maxheapify(a,i,length);
}
}
int main()
{
int a[]={4,1,3,2,16,9,10,14,8,7};
int temp=0;
buildmaxheap(a,sizeof(a)/sizeof(int));
int i=0;
//遍历数组
for(i=sizeof(a)/sizeof(int)-1;i>0;--i)
{
temp=a[i];
a[i]=a[0];
a[0]=temp;
maxheapify(a,0,i);
}
i=0;
for(i=0;i<sizeof(a)/sizeof(int);++i)
printf("%d ",a[i]);
return 0;
}
705

被折叠的 条评论
为什么被折叠?



