堆排序

来源:互联网 发布:linux切换工作目录 编辑:程序博客网 时间:2024/05/17 09:21

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

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

程序输出:建堆结果和建堆后第一、第二次筛选结果。(注:待排序记录数大于等于3

测试输入

6111216141510

测试输出

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();        }  


0 0
原创粉丝点击