堆排序程序(编写时有几个错误点,见注释,已通过dev c++调试通过)
#include <stdio.h>
#include <conio.h>
void HeapAdjust(int a[],int s,int n)//大顶堆
{
int temp=a[s];
for(int j=2*s;j<=n;j*=2)
{
if(j<n&&a[j]<a[j+1]) j++;
if(temp>a[j]) break;//这个错误点困扰了我好长时间。temp写成a[s]了,忘记了s[s]会发生变化。
a[s]=a[j];//一开始颠倒了
s=j;
}
a[s]=temp;
}
void HeapSort(int a[],int len)
{
for(int i=len/2;i>0;--i)
{
HeapAdjust(a,i,len);
}//建一个初始堆
for(int i=len;i>1;--i)
{
int temp=a[1];
a[1]=a[i];
a[i]=temp;
HeapAdjust(a,1,i-1);
}
}
int main()
{
int a[11]={0,9,8,7,1,6,4,3,5,2,0};
printf("初始序列");
for(int i=1;i<11;i++)
{
printf("%d ",a[i]);
}
HeapSort(a,10);
printf("排序后的序列");
for(int i=1;i<11;i++)
{
printf("%d ",a[i]);
}
getch();
return 0;
}
摘自:不喜欢熬夜的coder blog
补充:软件开发 , C++ ,