堆排序

堆排序算法实现与测试
成绩 10 开启时间 2017年11月22日 星期三 08:00
折扣 0.8 折扣时间 2017年12月15日 星期五 23:55
允许迟交 关闭时间 2018年01月8日 星期一 23:55

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

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

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

  测试输入关于“测试输入”的帮助 期待的输出关于“期待的输出”的帮助 时间限制关于“时间限制”的帮助 内存限制关于“内存限制”的帮助 额外进程关于“{$a} 个额外进程”的帮助
测试用例 1 以文本方式显示
  1. 6↵
  2. 11↵
  3. 12↵
  4. 16↵
  5. 14↵
  6. 15↵
  7. 10↵
以文本方式显示
  1. 16 15 11 14 12 10 ↵
  2. 15 14 11 10 12 ↵
  3. 14 12 11 10 ↵
1秒 64M 0
测试用例 2 以文本方式显示
  1. 9↵
  2. 9↵
  3. 8↵
  4. 7↵
  5. 6↵
  6. 5↵
  7. 4↵
  8. 3↵
  9. 2↵
  10. 1↵
以文本方式显示
  1. 9 8 7 6 5 4 3 2 1 ↵
  2. 8 6 7 2 5 4 3 1 ↵
  3. 7 6 4 2 5 1 3 ↵
1秒 64M 0
#include<stdio.h> 
 
int heap[100]; 
int size; 
void print(int index) 
{ 
  for (int i = 1; i <= index; i++) 
    { 
          printf("%d ",heap[i]); 
 } 
  printf("\n"); 
} 
void tiaozheng(int index) 
{ 
    int i, child; 
   
   for (i = index; 2 * i <= size; i = child) 
   { 
      child = 2 * i; 
     if (child != size&&heap[child + 1] > heap[child]) 
           child++; 
       if (heap[child] > heap[i]) 
 
     { 
            int tmp = heap[i]; 
           heap[i] = heap[child]; 
         heap[child] = tmp; 
     } 
  } 
} 
 
void Delete() 
{ 
   int i, child; 
  int maxenode = heap[1]; 
    int lastnode = heap[size--]; 
   for (i = 1; 2 * i <= size; i = child) 
   { 
      child = 2 * i; 
     if (child != size&&heap[child + 1] > heap[child]) 
           child++; 
       if (heap[child] > lastnode) 
         heap[i] = heap[child]; 
     else 
           break; 
 } 
  heap[i] = lastnode; 
} 
int main() 
{ 
 heap[0] = 100; 
 //freopen("1.txt", "r", stdin); 
    int node; 
  scanf("%d",&size); 
 int i = 1; 
 while (scanf("%d", &node) != EOF) 
  { 
      heap[i++] = node; 
  } 
  //建堆 
   for (i = size/ 2; i>=1; i--) 
    { 
      tiaozheng(i); 
  } 
  print(size); 
   Delete(); 
  print(size); 
   Delete(); 
  print(size); 
   return 0; 
}  



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

水之积也不厚,则其负大舟也无力

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值