帮忙给个简单的c语言堆排序法的程序!!

来源:百度知道 编辑:UC知道 时间:2024/06/18 13:50:51
简单易懂的!!

void fun1(int *a,int i,int j);
void fun(int *a)
{int i,t;
for(i=9/2;i>=0;i--)
fun1(a,i,9);//排成大根堆
for(i=9;i>0;i--)
{t=a[0];
a[0]=a[i];
a[i]=t;//每次把根结点调到最后,实现由小到大
fun1(a,0,i-1);}//根结点不是最大,继续排成大根堆
}
void fun1(int *a,int i,int j)
{int k,kk;
k=i*2;
kk=a[i];
while(k<=j)
{if(a[k]<a[k+1]&&k<j)
k++;
if(kk<a[k])
{a[i]=a[k];
i=k;
k=k*2;
}
else
break;
}
a[i]=kk;
}
main()
{int a[10],i;
for(i=0;i<10;i++)
{a[i]=9-i;
printf("%d",a[i]);}
fun(a);
printf("\n");
for(i=0;i<10;i++)
printf("%d",a[i]);
}
我就理解到这个地步