7-273 插入排序还是归并排序 (25 分)
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 分)相关推荐
- PTA 7-3 插入排序还是归并排序 (25分)
c++sort函数和equal函数的应用 一. sort函数 sort函数包含在头文件为#include的c++标准库中,调用标准库里的排序方法可以实现对数据的排序. sort(first,last, ...
- 7-2 插入排序还是归并排序 (30分)
根据维基百科的定义: 插入排序是迭代算法,逐一获得输入数据,逐步产生有序的输出序列.每步迭代中,算法从输入序列中取出一元素,将之插入有序序列中正确的位置.如此迭代直到全部元素有序. 归并排序进行如下迭 ...
- C++学习之路 | PTA乙级—— 1035 插入与归并 (25 分)(精简)
1035 插入与归并 (25 分) 根据维基百科的定义: 插入排序是迭代算法,逐一获得输入数据,逐步产生有序的输出序列.每步迭代中,算法从输入序列中取出一元素,将之插入有序序列中正确的位置.如此迭代直 ...
- 【2020模拟考试T5】【PAT乙】1035 插入与归并 (25分) 两种排序的sort写法
problem 1035 插入与归并 (25分) 根据维基百科的定义: 插入排序是迭代算法,逐一获得输入数据,逐步产生有序的输出序列.每步迭代中,算法从输入序列中取出一元素,将之插入有序序列中正确的位 ...
- 四种常见排序算法的对比和总结 插入排序、归并排序、快速排序、堆排序
目录 一.排序算法的时间复杂度 二.排序算法是否是原地排序 三.排序算法的额外空间 四.排序算法的稳定性 Stable 五.总结 这里我们要总结的排序算法主要有4个,分别是插入排序Insertion ...
- 12门课100分直博清华!这份成绩单冲上热搜,但学霸小伙也曾考过25分
点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 金磊 明敏 发自 凹非寺 量子位 报道 | 公众号 QbitAI 一 ...
- PTA 7-3 旅游规划 (25分)(双权值Dijkstra最短路)
7-3 旅游规划 (25分) 有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该公路要收取的过路费.现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径.如果有若干条路 ...
- PTA 03-树1 树的同构 (25分)
题目地址 https://pta.patest.cn/pta/test/15/exam/4/question/711 5-3 树的同构 (25分) 给定两棵树T1和T2.如果T1可以通过若干次左右 ...
- 【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 ...
最新文章
- java椭圆写字距离_保持轨道椭圆的距离
- Eclipse在高分屏下图标过小的解决方法
- MAX2323E - 原理图系列
- rabitMQ和kafka如何选择
- mongoose的populate
- 链表反转2(Reverse Linked List II)
- css初始化_CodeMirror项目【在线编辑器】--项目初始化
- Linux权限的简单剖析
- 用字符数组存放和处理字符串
- WWDC心愿单:新版OS X或将有这些变化
- 批量同时创建邮箱和AD账户
- 凤凰网科技频道定位和主要内容
- 使用Arduino Tone()函数演奏旋律
- Django框架之MVT(1)
- Pythonnet简介
- Kuberneters企业级容器云平台落地实践
- 网络io,磁盘io,线程池解决思想
- 混沌时间序列知识自学
- python财务报表书籍_Python读财报-获取财务报表
- 解决:安卓7.0以上自动更新无法安装问题
热门文章
- 渗透测试入门6之权限提升
- c语言数组的使用步骤,C语言中为什么要使用数组?详细图解数组的使用
- Linux系统格式化发fat32U盘密令,用diskpart命令格式化u盘为fat32的方法
- springboot socket服务端_SpringBoot2.x系列教程81--SpringBoot中整合WebSockets
- 数组对象的filter方法
- 基于AE的SimpleGIS框架的搭建
- 经典算法系列三----堆排序
- python选择排序 时间复杂度
- java基础—找出两个字符串中最大的子串
- Could not resolve placeholder 'jdbc.url' in value ${jdbc.url}