7-273 插入排序还是归并排序 (25 分)

根据维基百科的定义:

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

归并排序进行如下迭代操作:首先将原始序列看成 N 个只包含 1 个元素的有序子序列,然后每次迭代归并两个相邻的有序子序列,直到最后只剩下 1 个有序的序列。

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

输入格式:

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

输出格式:

首先在第 1 行中输出Insertion Sort表示插入排序、或Merge 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 0 6
1 3 2 8 5 7 4 9 0 6

结尾无空行

输出样例 2:

Merge Sort
1 2 3 8 4 5 7 9 0 6
#include <bits/stdc++.h>
//将插入和归并排序的所有中间序列记录下来,然后进行查找
#define mem(a) memset(a, 0, sizeof(a))
using namespace std;int tmp[101], ori[101], mid[101], ins[100][101], meg[10][101];
int n, cnts = 0, cntm = 0;
int youxu()
{for (int i = 2; i <= n; i++){if (ori[i] < ori[i - 1])return 0;}return 1;
}int cmp(int a[], int b[]) //比较是否相同
{for (int i = 1; i <= n; i++){if (a[i] != b[i])return 0;}return 1;
}void printarr(int a[])
{for (int i = 1; i < n; i++){printf("%d ", a[i]);}printf("%d\n", a[n]);
}int main()
{cin >> n;for (int i = 1; i <= n; i++){cin >> ori[i];tmp[i] = ori[i];}for (int i = 1; i <= n; i++){cin >> mid[i];}for (int k = 0;; k++) //产生插入排序的序列{if (youxu())break;int pos = 0;for (int i = 2; i <= n; i++){if (ori[i] < ori[i - 1]){pos = i;break;}}if (!pos)break;cnts++;ori[0] = ori[pos]; //临时保存pos位置的数字while (ori[pos - 1] > ori[0] && pos>1){ori[pos] = ori[pos - 1];pos--;}ori[pos] = ori[0];for (int i = 1; i <= n; i++)ins[k][i] = ori[i];}for (int i = 1; i <= n; i++)ori[i] = tmp[i]; //还原orifor (int k = 0;; k++) //产生归并排序的序列{int m = pow(2, k + 1);if (youxu())break;cntm++;for (int i = 1; i <= n; i += m){int e = i + m;if (i + m > n + 1)e = n + 1;sort(ori + i, ori + e);}for (int i = 1; i <= n; i++){meg[k][i] = ori[i];}}int flag = 0;for (int i = 0; i < cntm; i++){if (cmp(meg[i], mid)){flag = 1;cout<<"Merge Sort"<<endl;//printf("Merge Sort\n");printarr(meg[i + 1]);break;}}if (!flag){for (int i = 0; i < cnts; i++){if (cmp(ins[i], mid)){printf("Insertion Sort\n");printarr(ins[i + 1]);break;}}}return 0;
}

7-273 插入排序还是归并排序 (25 分)相关推荐

  1. PTA 7-3 插入排序还是归并排序 (25分)

    c++sort函数和equal函数的应用 一. sort函数 sort函数包含在头文件为#include的c++标准库中,调用标准库里的排序方法可以实现对数据的排序. sort(first,last, ...

  2. 7-2 插入排序还是归并排序 (30分)

    根据维基百科的定义: 插入排序是迭代算法,逐一获得输入数据,逐步产生有序的输出序列.每步迭代中,算法从输入序列中取出一元素,将之插入有序序列中正确的位置.如此迭代直到全部元素有序. 归并排序进行如下迭 ...

  3. C++学习之路 | PTA乙级—— 1035 插入与归并 (25 分)(精简)

    1035 插入与归并 (25 分) 根据维基百科的定义: 插入排序是迭代算法,逐一获得输入数据,逐步产生有序的输出序列.每步迭代中,算法从输入序列中取出一元素,将之插入有序序列中正确的位置.如此迭代直 ...

  4. 【2020模拟考试T5】【PAT乙】1035 插入与归并 (25分) 两种排序的sort写法

    problem 1035 插入与归并 (25分) 根据维基百科的定义: 插入排序是迭代算法,逐一获得输入数据,逐步产生有序的输出序列.每步迭代中,算法从输入序列中取出一元素,将之插入有序序列中正确的位 ...

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

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

  6. 12门课100分直博清华!这份成绩单冲上热搜,但学霸小伙也曾考过25分

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 金磊 明敏 发自 凹非寺 量子位 报道 | 公众号 QbitAI 一 ...

  7. PTA 7-3 旅游规划 (25分)(双权值Dijkstra最短路)

    7-3 旅游规划 (25分) 有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该公路要收取的过路费.现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径.如果有若干条路 ...

  8. PTA 03-树1 树的同构 (25分)

    题目地址 https://pta.patest.cn/pta/test/15/exam/4/question/711 5-3 树的同构   (25分) 给定两棵树T1和T2.如果T1可以通过若干次左右 ...

  9. 【PAT (Advanced Level) Practice】1051 Pop Sequence (25 分)

    1051 Pop Sequence (25 分) Given a stack which can keep M numbers at most. Push N numbers in the order ...

最新文章

  1. java椭圆写字距离_保持轨道椭圆的距离
  2. Eclipse在高分屏下图标过小的解决方法
  3. MAX2323E - 原理图系列
  4. rabitMQ和kafka如何选择
  5. mongoose的populate
  6. 链表反转2(Reverse Linked List II)
  7. css初始化_CodeMirror项目【在线编辑器】--项目初始化
  8. Linux权限的简单剖析
  9. 用字符数组存放和处理字符串
  10. WWDC心愿单:新版OS X或将有这些变化
  11. 批量同时创建邮箱和AD账户
  12. 凤凰网科技频道定位和主要内容
  13. 使用Arduino Tone()函数演奏旋律
  14. Django框架之MVT(1)
  15. Pythonnet简介
  16. Kuberneters企业级容器云平台落地实践
  17. 网络io,磁盘io,线程池解决思想
  18. 混沌时间序列知识自学
  19. python财务报表书籍_Python读财报-获取财务报表
  20. 解决:安卓7.0以上自动更新无法安装问题

热门文章

  1. 渗透测试入门6之权限提升
  2. c语言数组的使用步骤,C语言中为什么要使用数组?详细图解数组的使用
  3. Linux系统格式化发fat32U盘密令,用diskpart命令格式化u盘为fat32的方法
  4. springboot socket服务端_SpringBoot2.x系列教程81--SpringBoot中整合WebSockets
  5. 数组对象的filter方法
  6. 基于AE的SimpleGIS框架的搭建
  7. 经典算法系列三----堆排序
  8. python选择排序 时间复杂度
  9. java基础—找出两个字符串中最大的子串
  10. Could not resolve placeholder 'jdbc.url' in value ${jdbc.url}