实验要求:用堆排序算法按关键字递减的顺序排序。
程序输入:待排序记录数(整数)和待排序记录(整数序列);
程序输出:建堆结果和建堆后第一、第二次筛选结果。(注:待排序记录数大于等于3)
测试输入
6 11 12 16 14 15 10
测试输出
16 15 11 14 12 10 15 14 11 10 12 14 12 11 10
源代码
#include<stdio.h>
#include<stdlib.h>
int r[100];
int length;
void HeapAdjust( int s,int m)//建堆
{
int rc=r[s];
for(int j=2*s;j<=m;j*=2){
if(j<m&&r[j]<r[j+1])
++j;
if(!(rc<r[j]))
break;
r[s]=r[j];
s=j;
}
r[s]=rc;
}
void HeapSort( )//筛选堆
{
int i;
for(i=length/2;i>0;--i){
HeapAdjust(i,length);
}
for(i=1;i<=length;i++)
printf("%d ",r[i]);
printf("\n");
r[1]=r[length];
length--;
}
int main()
{
scanf("%d",&length);
for(int i=1;i<=length;i++)
scanf("%d",&r[i]);
HeapSort();
HeapSort();
HeapSort();
}