实验要求:用堆排序算法按关键字递减的顺序排序。
程序输入:待排序记录数(整数)和待排序记录(整数序列);
程序输出:建堆结果和建堆后第一、第二次筛选结果。(注:待排序记录数大于等于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(); }
