题目链接:点击查看

题目大意:给出两列数字,问第二列数是由第一列数怎样排序得到的,题目保证答案唯一,并且只有归并排序或插入排序两种选择

题目分析:因为一开始不太了解归并排序和插入排序的特点,所以有点无从下手,去网上看了一下各自的特点后,就有了模拟的大致方向了,先在这里挂一下两种排序中间过程的特点:(针对这个题目而言)

  1. 插入排序: 前面的一段连续序列有序,后面剩下的序列与原序列一一对应
  2. 归并排序:设当前归并长度为len(len为2的幂次,最小为1),则每长度为len的区间内都保证有序

有了这个特点,再加上题目保证了除了归并排序就是插入排序,因为插入排序的特点看起来比较好判断,那么我们可以先判断一下该序列是否是插入排序的中间过程,若是的话,记录一下断点,从头到断点后的一个位置sort一下答案就出来了;若不是插入排序,那么就只能是归并排序了,我们可以先找出当前归并排序的归并长度len,将len乘二后模拟一遍归并排序的规则即可(即每个长度为len的区间都单独排序)

这里有几个细节需要注意一下,我也不知道算不算坑点:

  1. 题目只是说了要保证升序排序,但没保证是严格升序,虽然两个样例都给出的是严格升序,但是我们在判断的时候都要以非严格升序来判断,不然会有一组测试点过不去
  2. 在处理归并排序时,若数组长度n无法整除归并长度len,也就是说明最后肯定会剩下一段区间比len要小,这个需要单独排序
  3. 在获得归并长度len后,我们需要将其乘2后再进行新一轮的排序,此时需要注意一下,若len*2>n的情况下,我们只需要处理到n即可

代码:(自认为还是写的比较清晰易看的)

#include<iostream>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<climits>
#include<cmath>
#include<cctype>
#include<stack>
#include<queue>
#include<list>
#include<vector>
#include<set>
#include<map>
#include<sstream>
#include<unordered_map>
using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=110;int n;int a[N],b[N];int check()//判断是否为插入排序
{b[0]=INT_MIN;int i;for(i=1;i<=n;i++){if(b[i-1]>b[i])break;}int mark=i;for(;i<=n;i++)if(a[i]!=b[i])return 0;return mark;
}int getlen()//获得归并排序的长度
{for(int len=1;len<=n;len<<=1){for(int i=1;i+len-1<=n;i+=len){int j=i+len-1;for(int k=i+1;k<=j;k++)if(b[k]<=b[k-1])return len;}}return n;//如果前面的最大长度len都通过了,那么下一次归并排序的长度最大到n结束
}void print()
{printf("%d",b[1]);for(int i=2;i<=n;i++)printf(" %d",b[i]);printf("\n");
} int main()
{
//  freopen("input.txt","r",stdin);scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d",a+i);for(int i=1;i<=n;i++)scanf("%d",b+i);int mark=check();if(mark)//插入排序 {puts("Insertion Sort");sort(b+1,b+1+mark);}else//归并排序 {puts("Merge Sort");int len=getlen();for(int i=1;i+len-1<=n;i+=len)//每长度为len的区间都单独排序 sort(b+i,b+i+len);sort(b+n/len*len+1,b+1+n);//最后剩余的那段也记得排序 }print();return 0;
}

PAT (Basic Level) 1035 插入与归并(模拟)相关推荐

  1. Basic Level 1035 插入与归并 (25分)

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

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

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

  3. PAT (Basic Level) 1075 链表元素分类(模拟)

    题目链接:点击查看 题目大意:初始时给出一个链表,需要按照要求排序: 当结点中的值为负数时,需要排在最前面 当结点中的值为非负数且小于阈值k时,排在中间 当结点中的值大于阈值k时,排在最后 在整体排序 ...

  4. PAT (Basic Level) 1091 N-自守数(模拟+stl)

    题目链接:点击查看 题目大意:给定一个数K,规定N-自守数的定义为K*K*N的末尾几位数等于K,则称K为N-自守数,比如3*92*92=25392,所以92是一个3-自守数,现在给出一些数,判断其是不 ...

  5. PAT (Basic Level) 1080 MOOC期终成绩(模拟+stl)

    题目链接:点击查看 题目大意:分别给出a个学生的编程分数,b个学生的期中考试成绩,c个学生的期末考试成绩,有几个规则: 总评为: 若期中考试成绩大于期末考试成绩: 否则: 合格的定义是编程分数大于等于 ...

  6. 【PAT乙级】1035 插入与归并 (25 分)

    题目地址 最终的精简版 #include<bits/stdc++.h> using namespace std; bool flag; vector<int>a(105,0), ...

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

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

  8. PAT 乙级 1035  插入与归并

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

  9. PAT (Basic Level) Practice (中文)答案合集

    准备复试专用,目标刷完全部中文题! 1001 害死人不偿命的(3n+1)猜想 (15 分) 卡拉兹(Callatz)猜想: 对任何一个正整数 n,如果它是偶数,那么把它砍掉一半:如果它是奇数,那么把 ...

最新文章

  1. httpd服务的访问控制
  2. NFS文件锁一致性设计原理解析
  3. python将非0数视为false_python 面试题
  4. 《JavaScript设计模式与开发实践》——第3章 闭包和高阶函数
  5. JavaScript indexOf() 方法
  6. 18号是什么php,19年1月18号CSS浮动float
  7. android源码使用方法,android源码中使用到的设计模式(创建型)
  8. 公安部计算机信息安全产品质量监督检验中心的质量责任和权限
  9. CC2530无线点灯
  10. 一:计算机基础入门及介绍
  11. 【DB2】查询上月末、上年末、上年同期等信息
  12. 山景BP1048使用记录
  13. 纽约州立大学石溪分校计算机专业排名,纽约州立大学石溪分校排名怎么样?
  14. keil工程 freertos AC5编译器移植到AC6编译器
  15. 通过WebView实现简单的浏览器
  16. 微信小程序文字跑马灯效果
  17. 2021-2027全球与中国可持续性蛋白质市场现状及未来发展趋势
  18. Ajax 发送json格式数据以及发送文件(FormData)和自带的序列化组件: serializers
  19. 人工智能数学课高等数学线性微积分数学教程笔记
  20. kdj指标主要看哪个值_kdj主要看哪条线?kdj指标看哪个值。

热门文章

  1. Nacos服务端流程图
  2. 从源码深处体验Spring核心技术--基于Xml的IOC容器的初始化
  3. 上传文件漏洞案例分析
  4. 创建集群版的Eureka注册中心
  5. 开闭原则coding
  6. supervisor配置文件中如何添加多个环境变量
  7. CentOS7 常用命令集合
  8. 更改printk打印级别【转】
  9. zabbix-3.0.1结合grafana绘图
  10. mysql之 binlog维护详细解析(开启、binlog相关参数作用、mysqlbinlog解读、binlog删除)...