根据维基百科的定义:

插入排序是迭代算法,逐一获得输入数据,逐步产生有序的输出序列。每步迭代中,算法从输入序列中取出一元素,将之插入有序序列中正确的位置。如此迭代直到全部元素有序。

堆排序也是将输入分为有序和无序两部分,迭代地从无序部分找出最大元素放入有序部分。它利用了大根堆的堆顶元素最大这一特征,使得在当前无序区中选取最大元素变得简单。

现给定原始序列和由某排序算法产生的中间序列,请你判断该算法究竟是哪种排序算法?

输入格式:
输入在第一行给出正整数 N (≤100);随后一行给出原始序列的 N 个整数;最后一行给出由某排序算法产生的中间序列。这里假设排序的目标序列是升序。数字间以空格分隔。

输出格式:
首先在第 1 行中输出Insertion Sort表示插入排序、或Heap Sort表示堆排序;然后在第 2 行中输出用该排序算法再迭代一轮的结果序列。题目保证每组测试的结果是唯一的。数字间以空格分隔,且行首尾不得有多余空格。

输入样例 1:
10
3 1 2 8 7 5 9 4 6 0
1 2 3 7 8 5 9 4 6 0
输出样例 1:
Insertion Sort
1 2 3 5 7 8 9 4 6 0
输入样例 2:
10
3 1 2 8 7 5 9 4 6 0
6 4 5 1 0 3 2 7 8 9
输出样例 2:
Heap Sort
5 4 3 1 0 2 6 7 8 9

错误记录:开始是插入还是堆排判断错误。后来竟然是插入排序出错了
初始判断排序种类,错误代码

if((am[1]<am[2])&&am[1]!=num[1]&&am[n]==num[n])

插入排序错误

 int i,j;for(i=1;i<n&&am[i]<am[i+1];i++){;}int key=am[i+1];for(j=i;j>=1;j--){if(am[j]>key) am[j+1]=am[j];else break;}am[j+1]=key;

正确的插入排序是从第二个元素开始。依次比较和他前面元素的大小。

---------------------------------
正确代码

#include<stdio.h>
void insert_sort(int *am,int n)
{int i,j;for(i=2; i<=n&&am[i-1]<=am[i]; i++);int key=am[i];for(j=i-1;j>=1;j--){if(am[j]>key) am[j+1]=am[j];else break;}am[j+1]=key;
}
void swap(int *a,int *b)
{int t=*a;*a=*b;*b=t;
}
void maxheapify(int *am,int i,int n)
{int l,r,max;while(1){l=i<<1;r=i<<1|1;if(l<=n&&am[l]>am[i]) max=l;else max=i;if(r<=n&&am[r]>am[max]) max=r;if(max==i) return;swap(&am[i],&am[max]);i=max;}
}
void heap_sort(int *am,int n)
{int i,size;for(i=n;i>1&&am[i]>am[i-1];i--){;}size=i-1;swap(&am[1],&am[i]);maxheapify(am,1,size);
}
int main(void)
{int n;scanf("%d",&n);int num[120]={0};int am[120]={0};for(int i=1;i<=n;i++)scanf("%d",num+i);for(int i=1;i<=n;i++)scanf("%d",am+i);if(am[1]<am[2]){printf("Insertion Sort\n");insert_sort(am,n);for(int i=1;i<=n;i++){if(i!=n) printf("%d ",am[i]);else printf("%d\n",am[i]);}}else{printf("Heap Sort\n");heap_sort(am,n);for(int i=1;i<=n;i++){if(i!=n) printf("%d ",am[i]);else printf("%d\n",am[i]);}}return 0;}

pta 插入排序还是堆排序相关推荐

  1. ❤️万字总结八大排序:冒泡排序,选择排序,插入排序,堆排序,希尔排序,归并排序,计数排序❤️

    目录 主要排序算法性能对比 冒泡排序 选择排序 插入排序 堆排序 希尔排序 快速排序 Hoare版 挖坑版 前后指针法 归并排序 计数排序 海量数据的排序问题 主要排序算法性能对比 冒泡排序 各位同学 ...

  2. PTA 函数题 堆排序(C语言)

    本题要求实现堆排序中的筛选函数,待排序列的长度1<=n<=1000. 函数接口定义: void HeapAdjust( HeapType H, int s, int m); 其中L是待排序 ...

  3. PAT甲级1098 Insertion or Heap Sort:[C++题解]堆排序和插入排序

    文章目录 题目分析 题目链接 题目分析 分析 插入排序的特点:前半部分有序,后半部分保持原序. 堆排序的特点: 后半部分有序,前半部分无序. 本题的bug在于,答案是唯一的,即不是插入排序就是堆排序, ...

  4. 四种常见排序算法的对比和总结 插入排序、归并排序、快速排序、堆排序

    目录 一.排序算法的时间复杂度 二.排序算法是否是原地排序 三.排序算法的额外空间 四.排序算法的稳定性 Stable 五.总结 这里我们要总结的排序算法主要有4个,分别是插入排序Insertion ...

  5. laravel 先排序后分组怎么写_插入排序的故事

    话说计算机世界有一个诚实国,那里的人们不但诚实,而且尊老,每次排队都让年纪大的人排前面. 有一次小胖到诚实国去旅游,肚子饿了想吃东西,发现一个烧饼店门前有人排着队,他就跟在队伍后面一起排队.没过多久, ...

  6. 选择排序 插入排序 交换排序

    动图演示: https://www.runoob.com/w3cnote/bubble-sort.html 选择排序 简单选择排序 在未排序的序列中,选出最小的元素和序列的首位元素交换,接下来在剩下的 ...

  7. 数据结构——平衡二叉树PTA习题(很多不会的,求大佬帮忙写题解)

    文章目录 单选题 选择题题解 编程题 7-3 插入排序还是堆排序 (25分) 不会 输入格式: 输出格式: 输入样例 1: 输出样例 1: 输入样例 2: 输出样例 2: 代码 7-4 愿天下有情人都 ...

  8. 高效排序算法——希尔排序、堆排序、归并排序、快速排序

    如标题,这里讨论的是基于比较的排序算法中最高效的三种算法和希尔排序.堆排序.归并排序.快速排序的平均时间复杂度均为O(NlogN).前面有介绍过O(N2)的三种简单排序算法(见三大简单排序算法--插入 ...

  9. 【二级java】排序技术

    例题1 :希尔排序属于下列哪种排序法 解析: 希尔排序法的基本思想是: 将整个无序序列分割成若干小的子序列分别进行插入排序,所以属于插入排序 例题2 : 在下列几种排序方法中,要求内存量最大的是 解析 ...

最新文章

  1. Linux系统无线鼠标不能用,手把手教你win7系统无线鼠标不能用的处理方案
  2. Hibernate学习4—关联关系一对多映射2
  3. Android 学习笔记 BroadcastReceiver广播...
  4. SQL99标准中的查询(MySQL)
  5. 1995 年乔布斯访谈:什么对产品最重要
  6. Go语言在Linux环境下输出彩色字符
  7. 均值差异大但是t检验不显著_T检验原理及介绍
  8. 张首晟教授:区块链让社会变得更加公平 与人工智能的结合令人激动 | IT领袖峰会...
  9. [HAOI2010]计数 数位DP+组合数
  10. SecureCRT恢复默认字体
  11. 联想 计算机无线网络设置方法,联想笔记本无线网络开关,详细教您联想笔记本无线网络开关...
  12. 如何在Mac上裁剪图片
  13. 机器学习多步时间序列预测解决方案
  14. Spline算法实现
  15. iOS15使用带Header的tableview 顶部出现空白问题
  16. mysql where or短路吗,是否对SQL WHERE子句进行了短路评估?
  17. 【小程序】websocket实现“谁是卧底”在线随机发牌
  18. Unity游戏开发官方入门教程:飞机大战(六)——创建子弹
  19. web项目-中日韩文通用UTF-8处理流程
  20. 第三天:基础入门-抓包封包协议APP小程序PC应用WEB应用

热门文章

  1. myeclipse生成注册码,破解,不用下载任何文件,代码方式破解
  2. 代码重构中的几个概念
  3. shell 读取配置文件
  4. (转)命令行下,用 xcodebuild 生成ipa文件,通过 itms-services 协议安装
  5. Oracle 添加RAC数据库集群节点(一)
  6. python logger
  7. 解释一下c语言 for(;;) printf(*);,printf()函数的一个问题
  8. android悬浮动态权限,android应用内悬浮窗-自动贴边,不需要权限!
  9. python post与get的区别_python中get和post有什么区别
  10. python计算选手最后得分并取出前三名_在Python中存储最后3个分数并删除旧分数并计算平均值?...