题目详情

1035 插入与归并 (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

分析

要解题,首先要明白什么是 插入排序(可以看递归插入排序(C++),虽然是递归版本的,但是可以比较容易换成迭代版本的)、
和 归并排序(可以看数组中的逆序对(C++)---归并排序(分治思想)解题,里面有 归并排序 的图解)。

要判断是插入排序还是归并排序,可以先判断是否为插入排序,如果不是 则是归并排序
后面再根据情况 来 用该排序算法再迭代一轮,最后输出结果序列。


-解题代码

#include <iostream>
#include <algorithm>
using namespace std;int n;//插入排序
void Insertion_Sort(int *p, int pos) {//sort(t, t+len);for(int i = 1; i < pos; i++){int j, temp = *(p+i); //temp暂存需比较的数 for(j = i - 1; j >= 0 && *(p+j) > temp; j--){*(p+j+1) = *(p+j);}*(p+j+1) = temp;}
}//归并排序
void Merge_Sort(int *p, int len) {for(int i = 0; i < n; i += len) {if (i + len <= n) {sort(p+i, p+i+len);} else {sort(p+i, p+n);}}
}bool equal(int *p1, int *p2) {for(int i = 0; i < n; i++){if (p1[i] != p2[i]) return false;}return true;
}int main()
{int a[100], b[100];cin >> n;for(int i = 0; i < n; i++) cin>>a[i];for(int i = 0; i < n; i++) cin>>b[i];int pos = 1;for(int i = 1; i < n; i++){if (b[i] >= b[i-1]) pos++;else break;}int flag = 1; //flag为1表示插入排序,为0表示归并排序 for(int i = pos; i < n; i++){if (a[i] != b[i]) {flag = 0;break;}}if (flag) {cout <<"Insertion Sort"<< endl;Insertion_Sort(b, pos+1);} else {cout <<"Merge Sort"<<endl;for(int i = 2; i <= n; i *= 2){if (equal(a, b)) {Merge_Sort(b, i);} else {Merge_Sort(a, i);}}}cout<<b[0];for(int i = 1; i < n; i++){cout<<" "<<b[i];}return 0;
}

结果

1035 插入与归并(C++)相关推荐

  1. 1035. 插入与归并(25)

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

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

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

  3. PAT乙级(1035 插入与归并)

    PAT乙级 1035 插入与归并 解题思路 代码 详细题目见官网 大意:给定序列,第一行为原始序列,第二行为某种排序产生的中间序列 输出结果: 第一行,输出是 插入排序 还是 归并排序 第二行,给出该 ...

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

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

  5. PAT 乙级 1035  插入与归并

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

  6. 1035 插入与归并

    1. 这一题,首先要会插入排序和归并排序的写法.对于归并排序,可以用非递归+sort最简便.把每一趟的结果存进二维数组. 2. 单独封装一个函数,比较两个一维数组是否完全一样. 3. 由于归并比插入的 ...

  7. 1035 插入与归并 (25 分)(c++)

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

  8. 【简便解法】1035 插入与归并 (25分)_37行代码AC

    立志用更少的代码做更高效的表达 PAT乙级最优题解-->传送门 根据维基百科的定义: 插入排序是迭代算法,逐一获得输入数据,逐步产生有序的输出序列.每步迭代中,算法从输入序列中取出一元素,将之插 ...

  9. 1035. 插入与归并(25)-浙大PAT乙级真题

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

最新文章

  1. oracle查看相关用户表
  2. 熟练掌握python是什么概念-Python学到什么程度可以面试工作?
  3. UA MATH571B 试验设计 QE练习题 不使用代码分析试验结果I
  4. BASIC-1 闰年判断
  5. Python函数参数学习
  6. 安卓案例:利用SQLiteOpenHelper操作数据库及表
  7. wamp php启动不成功,wamp的mysql 启动失败解决
  8. java 课后习题 随机数统计
  9. 大数据教程(2.2):Linux系统安装JDK1.7
  10. css命中与jquery命中
  11. C语言之结构体嵌套调用(十八)
  12. [原创]开心农场助手V1.21 发布
  13. mac环境下Android 反编译
  14. 鲍斯科机器人_芜湖鲍斯柯机器人有限公司、上海富治机械科技有限公司服务合同纠纷二审民事判决书...
  15. 计算某一天是星期几(C语言,可运行)
  16. 计算机视觉和机器学习_我从计算机视觉和机器学习硕士课程中学到的东西
  17. 【正点原子Linux连载】第七十一章 Linux 4G通信实验 -摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0
  18. 使用SIMD指令加速计算
  19. html代码在线解析,VIP在线解析HTML源码(修改论坛的源码、加搜索功能)
  20. Kafka Tool Download

热门文章

  1. 多数据源动态优雅切换
  2. 农夫山泉:HANA应用在企业中层层展现
  3. C++的与/或/异或的详解
  4. MATLAB二维图形绘制
  5. electron-vue+electron-updater实现自动更新
  6. [转载]32位系统与64位系统的区别(整合三篇写的比较好的文章)
  7. TCL爱奇艺再次联姻 共同打造国际微电影节
  8. 你好,23岁的 Petterp
  9. rf2o_laser_odometry运行警告Waiting for laser_scans....
  10. 希望越大失望越大?iPhone 4S详情解析