PAT Basic 1035
1035 插入与归并
根据维基百科的定义:
插入排序是迭代算法,逐一获得输入数据,逐步产生有序的输出序列。每步迭代中,算法从输入序列中取出一元素,将之插入有序序列中正确的位置。如此迭代直到全部元素有序。
归并排序进行如下迭代操作:首先将原始序列看成 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
题解:这道题看上去是考插入排序和归并排序,但是其实根据题目意思,只要稍微了解这两个算法,就完全能做出来了。
插入排序如题目所说是一个一个插入,所以如果是使用插入排序的数据,一定是前面有序,后面无序的。
归并排序则是先将相邻两组进行排序,完成后,再将相邻两组进行排序,直到将整个数列规整为一组。,使用归并排序的数据,一定是前n个有序,中间n个有序,后n个有序。
这道题目判断是插入排序还是归并排序的方法有许多,我采用的是从无序的第一个元素开始,与初始元素对比,若存在和初始元素不一样的,则是归并排序,否则是插入排序。。
这道题的一个坑点在于,在判断为归并排序后,不能直接进行下一步操作,必须重新计算。
代码如下:
#include<iostream>
#include<algorithm>
using namespace std;
int a[], b[], c[];
int main()
{
int n, j, temp = ;
bool flag = true;
scanf("%d",&n);
for(int i = ; i < n; i++){
scanf("%d",&a[i]);
}
for(int i = ; i < n; i++){
scanf("%d",&b[i]);
c[i] = b[i];
}
temp = b[];
for( j = ; j < n; j++){
if(temp <= b[j])
temp = b[j];
else{
temp = j;
break;
}
}
for( int k = temp+; k < n; k++){
if(b[k] != a[k]){
flag = true;
break;
}
if( k == n-)
flag = false;
}
if(flag){
printf("Merge Sort\n");//不能直接归并,必须重新计算
temp = ;
bool flag3 = ;
while(flag3){
flag3 = ;
for(int i = ; i < n; i++){
if( a[i] != b[i] ){
flag3 = ;
break;
}
}
temp *= ;
for( int i = ; i < n; i+=temp){
if(i+temp < n)
sort(a+i,a+i+temp);
else
sort(a+i,a+n);
}
}
}
else{
sort(a,a+temp+);
printf("Insertion Sort\n");
}
bool flag2 = false;
for( int i = ; i < n; i++){
if(!flag2)
flag2 = true;
else
printf(" ");
printf("%d",a[i]);
}
return ;
}
PAT Basic 1035的更多相关文章
- PAT (Basic Level) Practise (中文)-1035. 插入与归并(25)
PAT (Basic Level) Practise (中文)-1035. 插入与归并(25) http://www.patest.cn/contests/pat-b-practise/1035 ...
- PAT Basic 1057
1057 数零壹 给定一串长度不超过 105 的字符串,本题要求你将其中所有英文字母的序号(字母 a-z 对应序号 1-26,不分大小写)相加,得到整数 N,然后再分析一下 N 的二进制表示中有 ...
- PAT (Basic Level) Practise (中文)-1039. 到底买不买(20)
PAT (Basic Level) Practise (中文)-1039. 到底买不买(20) http://www.patest.cn/contests/pat-b-practise/1039 小红 ...
- PAT (Basic Level) Practise (中文)- 1022. D进制的A+B (20)
PAT (Basic Level) Practise (中文)- 1022. D进制的A+B (20) http://www.patest.cn/contests/pat-b-practise/1 ...
- PAT (Basic Level) Practise (中文)- 1024. 科学计数法 (20)
PAT (Basic Level) Practise (中文)- 1024. 科学计数法 (20) http://www.patest.cn/contests/pat-b-practise/1024 ...
- PAT (Basic Level) Practise (中文)-1025. 反转链表 (25)
PAT (Basic Level) Practise (中文)-1025. 反转链表 (25) http://www.patest.cn/contests/pat-b-practise/1025 ...
- PAT (Basic Level) Practise (中文)- 1026. 程序运行时间(15)
PAT (Basic Level) Practise (中文)- 1026. 程序运行时间(15) http://www.patest.cn/contests/pat-b-practise/10 ...
- PAT (Basic Level) Practise (中文)-1027. 打印沙漏(20)
PAT (Basic Level) Practise (中文)-1027. 打印沙漏(20) http://www.patest.cn/contests/pat-b-practise/1027 本题 ...
- PAT (Basic Level) Practise (中文)-1028. 人口普查(20)
PAT (Basic Level) Practise (中文)-1028. 人口普查(20) http://www.patest.cn/contests/pat-b-practise/1028 某 ...
随机推荐
- Python常用模块之hashlib(加密)
Python常用模块之hashlib(加密) Python里面的hashlib模块提供了很多加密的算法,这里介绍一下hashlib的简单使用事例,用hashlib的md5算法加密数据import ha ...
- DB2 函数
1.大小写转换 转大写UPPER 转小写LOWER
- Java之内部类、包及代码块
个人通俗理解: 1.内部类:有点类似于写在父类中的子类,根据位置不一样为不同的名字,和相应的访问方式不同:不过要访问外部类的话,需要充分运用好this(本类)的这个关键字:要是需要快速的创建子类对象的 ...
- JS小游戏
捕鱼达人 飞机大战游戏 详解javaScript的深拷贝 http://www.cnblogs.com/penghuwan/p/7359026.html
- Android Studio 遇到的java.util.concurrent.ExecutionException:com.android.ide.common.process.ProcessExce问题
在将一个Eclipse的项目转移到AndroidStudio的过程中,碰到了的问题如下: Error:Execution failed for task ':learnChinese:mergeDeb ...
- [总结].net操作MongoDb通用基础类1:
public class MongoDBHelper { //定义Mongo服务 private MongoServer mongo = null; //获取databaseName对应的数据库,不存 ...
- X11/extensions/XShm.h: No such file or directory
CentOS 编译一些开源项目提示:X11/extensions/XShm.h: No such file or directory. 运行命令:yum install libXext-devel就可 ...
- openstack v3 rest 访问
1. openstack主要面向得是python为主得开发.目前java中嵌入openstack主要是通过rest接口访问 2. 下载一个postman的接口测试工具 3. openstack 中的服 ...
- 动手使用ABAP Channel开发一些小工具,提升日常工作效率
今天的故事要从ABAP小游戏说起. 中国的ABAP从业者们手头或多或少都搜集了一些ABAP小游戏,比如下面这些. 消灭星星: 扫雷: 来自我的朋友刘梦,公众号"SAP干货铺"里的俄 ...
- 使用JavaScript调用手机平台上的原生API
我之前曾经写过一篇文章使用Cordova将您的前端JavaScript应用打包成手机原生应用,介绍了如何使用Cordova框架将您的用JavaScript和HTML开发的前端应用打包成某个手机平台(比 ...