堆排序程序(编写时有几个错误点,见注释,已通过dev c++调试通过)

2014-11-24 12:43:52 · 作者: · 浏览: 1

#include
#include
void HeapAdjust(int a[],int s,int n)//大顶堆
{
int temp=a[s];
for(int j=2*s;j<=n;j*=2)
{
if(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