博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PAT Basic 1035
阅读量:4966 次
发布时间:2019-06-12

本文共 2613 字,大约阅读时间需要 8 分钟。

1035 插入与归并

根据维基百科的定义:

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

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

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

输入格式:

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

输出格式:

首先在第 1 行中输出Insertion Sort表示插入排序、或Merge Sort表示归并排序;然后在第 2 行中输出用该排序算法再迭代一轮的结果序列。题目保证每组测试的结果是唯一的。数字间以空格分隔,且行首尾不得有多余空格。

输入样例 1:

103 1 2 8 7 5 9 4 6 01 2 3 7 8 5 9 4 6 0

输出样例 1:

Insertion Sort1 2 3 5 7 8 9 4 6 0

输入样例 2:

103 1 2 8 7 5 9 4 0 61 3 2 8 5 7 4 9 0 6

输出样例 2:

Merge Sort1 2 3 8 4 5 7 9 0 6   题解:这道题看上去是考插入排序和归并排序,但是其实根据题目意思,只要稍微了解这两个算法,就完全能做出来了。   插入排序如题目所说是一个一个插入,所以如果是使用插入排序的数据,一定是前面有序,后面无序的。   归并排序则是先将相邻两组进行排序,完成后,再将相邻两组进行排序,直到将整个数列规整为一组。,使用归并排序的数据,一定是前n个有序,中间n个有序,后n个有序。   这道题目判断是插入排序还是归并排序的方法有许多,我采用的是从无序的第一个元素开始,与初始元素对比,若存在和初始元素不一样的,则是归并排序,否则是插入排序。。   这道题的一个坑点在于,在判断为归并排序后,不能直接进行下一步操作,必须重新计算。 代码如下:
1 #include
2 #include
3 using namespace std; 4 int a[105], b[105], c[105]; 5 int main() 6 { 7 int n, j, temp = 0; 8 bool flag = true; 9 scanf("%d",&n);10 for(int i = 0; i < n; i++){11 scanf("%d",&a[i]);12 }13 for(int i = 0; i < n; i++){14 scanf("%d",&b[i]);15 c[i] = b[i];16 }17 temp = b[0];18 for( j = 0; j < n; j++){19 if(temp <= b[j])20 temp = b[j];21 else{22 temp = j;23 break; 24 }25 } 26 for( int k = temp+1; k < n; k++){27 if(b[k] != a[k]){28 flag = true;29 break;30 }31 if( k == n-1)32 flag = false;33 }34 if(flag){35 printf("Merge Sort\n");//不能直接归并,必须重新计算 36 temp = 1;37 bool flag3 = 1;38 while(flag3){39 flag3 = 0;40 for(int i = 0; i < n; i++){41 if( a[i] != b[i] ){42 flag3 = 1;43 break;44 }45 }46 temp *= 2;47 for( int i = 0; i < n; i+=temp){48 if(i+temp < n)49 sort(a+i,a+i+temp);50 else51 sort(a+i,a+n);52 }53 }54 }55 else{56 sort(a,a+temp+1);57 printf("Insertion Sort\n");58 }59 bool flag2 = false;60 for( int i = 0; i < n; i++){61 if(!flag2)62 flag2 = true;63 else64 printf(" ");65 printf("%d",a[i]); 66 }67 return 0;68 }

 

 

转载于:https://www.cnblogs.com/yxp400/p/9459972.html

你可能感兴趣的文章
《需求规格说明书》业务描述活动图
查看>>
Resnet论文翻译
查看>>
第十四天-内置函数
查看>>
连接LilyPad之Linux平台的驱动
查看>>
Apriori算法的C++实现
查看>>
SpringMVC上传图片并压缩及剪切demo
查看>>
JS字符串函数
查看>>
css案例学习之层叠样式
查看>>
require和require_once的区别
查看>>
存储设备形成的层次结构
查看>>
网站开发感悟
查看>>
香袅金猊动
查看>>
JVM调优和深入了解性能优化
查看>>
8步共振项目管理体系(3):实施顾问和项目经理的素质要求
查看>>
2016年5月29日 星期天 晴 石家庄
查看>>
多重背包题目
查看>>
Python禁用GC优化性能
查看>>
Balsamiq Mockups registration code
查看>>
OpenCV中imread失败cvLoadImage成功
查看>>
[译]Javascript中的递归函数
查看>>