#include<stdio.h>
#define N 100
void HeapAdjust(int a[],int s,int m)//将元素为s为根的子树调整
{
int root;
int i;
root=a[s];//root暂存根节点
for(i=2*s;i<=m;i=i*2)
{
if(a[i]<a[i+1]&&i<m)
{
i++;
}
if(root>a[i])
{
break;
}
else
{
a[s]=a[i];
s=i;
}
}
a[s]=root;
}
void HeapSort(int a[],int n)
{
int i,j;
int temp;
for(i=n/2;i>0;i--)
{
HeapAdjust(a,i,n);
}
for(i=n;i>0;i--)
{
temp=a[1];
a[1]=a[i];
a[i]=temp;
HeapAdjust(a,1,i-1);
}
for(i=1;i<=n;i++)
{
printf("%d\t",a[i]);
}
}
int main()
{
int n,i;
int a[N];
printf("请输入要排序的数字个数:\n");
scanf("%d",&n);
printf("请顺序输入 %d 个数字:\n",n);
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
HeapSort(a,n);
}
|