PAT 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
考察插入排序与归并排序,需注意的是,此处考察的是归并排序的自底向上的方法而非递归形式的自顶向下。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<ctype.h>
#include<math.h>
//交换元素
void swap(int &a,int &b){
int temp = a;
a = b;
b = temp;
}
//打印数组
void print(int a[],int n){
printf("%d",a[]);
for(int i=;i<n;i++){
printf(" %d",a[i]);
}
printf("\n");
} //归并排序中的合并操作
void merge(int a[],int start,int mid,int end){
int c[];
int start1 = mid+;
int k = ;
int h = start;
while(start<=mid&&start1<=end){
if(a[start]<a[start1])
c[k++] = a[start++];
else
c[k++] = a[start1++];
}
while(start<=mid)
c[k++] = a[start++];
while(start1<=end)
c[k++] = a[start1++];
for(int i=;i<k;i++)
a[i+h] = c[i]; }
//归并排序中自顶向下的递归形式
/*void mergeSort(int a[],int start,int end){
if(start<end){
int mid = (start+end)/2;
mergeSort(a,start,mid);
mergeSort(a,mid+1,end);
merge(a,start,mid,end);
print(a,10);
}
}*/ //归并排序中自底向下的形式
void mergeSort(int a[],int length,int n){
int i;
for(i=;i+*length-<n;i=i+length*)
merge(a,i,i+length-,i+*length-);
if(i+length-<n)
merge(a,i,i+length-,n);
} int main(){
int n;
int a[];
int a1[];
int b[];
int j;
int flag=,flag1=;
scanf("%d",&n);
for(int i=;i<n;i++){
scanf("%d",&a[i]);
a1[i] = a[i];
}
for(int i=;i<n;i++){
scanf("%d",&b[i]);
}
//插入排序
for(int i=;i<n;i++){
for(j=i;j>;j--){
if(a[j]<a[j-]){
swap(a[j],a[j-]);
}
}
if(flag){
printf("Insertion Sort\n");
print(a,n);
return ;
}
for(j=;j<n;j++){
if(a[j]!=b[j]){
break;
}
}
if(j==n){
flag = ;
}
}
//归并排序
int length;
for(length=;length<n;length=length*){
mergeSort(a1,length,n-);
if(flag1){
printf("Merge Sort\n");
print(a1,n);
return ;
}
for(j=;j<n;j++){
if(a1[j]!=b[j])
break;
}
if(j==n)
flag1 = ;
} }
PAT 1035. 插入与归并(25)的更多相关文章
- PAT (Basic Level) Practise (中文)-1035. 插入与归并(25)
PAT (Basic Level) Practise (中文)-1035. 插入与归并(25) http://www.patest.cn/contests/pat-b-practise/1035 ...
- PAT-乙级-1035. 插入与归并(25)
1035. 插入与归并(25) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 根据维基百科的定义: 插入排序是迭 ...
- PAT 1035 插入与归并(25)(代码+思路+测试点分析)
1035 插入与归并(25 分) 根据维基百科的定义: 插入排序是迭代算法,逐一获得输入数据,逐步产生有序的输出序列.每步迭代中,算法从输入序列中取出一元素,将之插入有序序列中正确的位置.如此迭代直到 ...
- PAT 1035 插入与归并(25)
原题:https://pintia.cn/problem-sets/994805260223102976/problems/994805286714327040传送门: 根据维基百科的定义: 插入排序 ...
- PAT——1035. 插入与归并
根据维基百科的定义: 插入排序是迭代算法,逐一获得输入数据,逐步产生有序的输出序列.每步迭代中,算法从输入序列中取出一元素,将之插入有序序列中正确的位置.如此迭代直到全部元素有序. 归并排序进行如下迭 ...
- PAT 1035 插入与归并
https://pintia.cn/problem-sets/994805260223102976/problems/994805286714327040 据维基百科的定义: 插入排序是迭代算法,逐一 ...
- 1035 插入与归并 (25 分)C语言
根据维基百科的定义: 插入排序是迭代算法,逐一获得输入数据,逐步产生有序的输出序列.每步迭代中,算法从输入序列中取出一元素,将之插入有序序列中正确的位置.如此迭代直到全部元素有序. 归并排序进行如下迭 ...
- PAT(B) 1035 插入与归并(Java)
题目链接:1035 插入与归并 (25 point(s)) 参考博客:PAT乙级--1035(插入排序和归并)java实现熊仙森 题目描述 根据维基百科的定义: 插入排序是迭代算法,逐一获得输入数据, ...
- P 1035 插入与归并
转跳点 :
随机推荐
- MySQL 5.7:非结构化数据存储的新选择
本文转载自:http://www.innomysql.net/article/23959.html (只作转载, 不代表本站和博主同意文中观点或证实文中信息) 工作10余年,没有一个版本能像MySQL ...
- springmvc的类型转换
一.springmvc的类型转换 (一)默认情况下,springmvc内置的类型转换器只能 将"yyyy/MM/dd"类型的字符串转换为Date类型的日期 情境一: 而现在我们无 ...
- jq倾斜的动画导航菜单
效果预览网址:http://keleyi.com/keleyi/phtml/jqmenu/index.htm 支持IE.Chrome.火狐等浏览器 完整源代码,保存到HTML文件打开也可查看效果: & ...
- HTTP 协议整理(转)
HTTP 协议 作为web开发人员,了解一些http协议的知识很有必要.本文简单介绍了HTTP协议的知识,若有错误的地方,望大家斧正. 1.HTTP协议是什么? http协议是一个应用层的协议.规定了 ...
- [转载]Javascript异步编程的4种方法
NodeJs的最大特性就是"异步" 目前在NodeJs里实现异步的方法中,使用“回调”是最常见的. 其实还有其他4种实现异步的方法: 在此以做记录 --- http://www.r ...
- javascript 中的location.href 并不是立即执行的,是在所在function 执行完之后执行的。
javascript 中的location.href 并不是立即执行的,是在所在function 执行完之后执行的. 1 function getUrl(tp) { if (tp == 'd') { ...
- JavaScript实现拖拽元素对齐到网格(每次移动固定距离)
这几天在做一个拖拽元素的附加功能,就是对齐到网格,实际上就是确定好元素的初始位置,然后拖拽元素时,每次移动固定的距离.让元素都可以在网格内对齐.先上效果图,然后在详细说明一下细节问题 做了一个gif图 ...
- VS2012 Unit Test —— 我对接口进行单元测试使用的技巧
[题外话] 对单元测试不熟悉的童鞋可参照我之前写过的两篇博文: <在Visual Studio 2012使用单元测试>. <VS2012 单元测试之泛型类(Generics Unit ...
- Java Web总结
一.地址 客户端路径和服务端路径 表单:<form action="路径"></form> 超链接:<a href="路径"> ...
- 两种方法设置disabled属性
//两种方法设置disabled属性 $('#fileup').attr("disabled",true); $('#fileup').attr("disabled&qu ...