堆排序

xiaoxiao2021-02-28  102

实验要求:用堆排序算法按关键字递减的顺序排序

程序输入:待排序记录数(整数)和待排序记录(整数序列);

程序输出:建堆结果和建堆后第一、第二次筛选结果。(注:待排序记录数大于等于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(); }

转载请注明原文地址: https://www.6miu.com/read-83807.html

最新回复(0)