#include <stdio.h>
int v[100];
int n;
void build (int i,int e)
{
int j=i;
while(2*j<=e) //防止越界,考慮單支情況
{
int l;
if(j*2<e&&v[2*j]<v[2*j+1]) l=2*j+1;
else l=2*j;
if(v[j]<v[l])
{
int temp=v[j];
v[j]=v[l];
v[l]=temp;
j=l;
}
else j=e;
}
}
void heapsort () //堆排序
{
for(int i=n/2;i>0;i--) //從最後一個非葉結點構造堆結構
build(i,n);
for(int i=n;i>=2;i--)
{
int temp=v[i];
v[i]=v[1];
v[1]=temp;
build(1,i-1);
}
}
int main ()
{
while(scanf("%d",&n)==1)
{
for(int i=1;i<=n;i++)
scanf("%d",&v[i]);
heapsort();
for(int i=1;i<=n;i++)
if(i!=n) printf("%d ",v[i]);
else printf("%d/n",v[i]);
}
return 0;
}
堆排序
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.