1089. Insert or Merge (25)

原创 2016年08月30日 09:38:41

IEDA

1.此题不是insertion sort就是merge sort。

2.insertion sort容易判断,根据定义,insertion sort插入的数据是有序的,所以找出序列中第一个使得子序列未有序的数字,判断从该数开始到结束,所有数字是否与原给定的待排序数一致,若一致,则可以判定为insertion sort。接下来要做的就是在进行一次排序,将刚找出的数字与前面有序子序列进行一系排序,用sort函数即可。

3.若不一致,则为merge sort,首先要做的是,找出几个数一组,即几个数基本有序,设为step,然后将step*=2,在部分排序的基础上对以step为步长的子序列排序


CODE

#include<iostream>
#include<vector> 
#include<algorithm>
#include<fstream>
using namespace std;
int isequal(vector<int> &init,vector<int> &part,int x){
	for(int i=x;i<init.size();i++){
		if(init[i]!=part[i]){
			return 0;
		}
	}
	return 1;
}
int isorder(vector<int> &part,int step){
	for(int i=0;i<part.size();i+=step){
		for(int j=i+1;j<part.size()&&j<i+step;j++){
			if(part[j]<part[j-1]){
				return 0;
			}
		}
	}
	return 1;
}
int main(){
	#ifndef ONLINE_JUDGE
	freopen("input.txt","r",stdin);
	#endif
	
	int n;
	while(cin>>n){
		vector<int> initial(n);
		vector<int> partial(n);
		for(int i=0;i<n;i++){
			cin>>initial[i];
		}
		for(int i=0;i<n;i++){
			cin>>partial[i];
		}
		int x;
		for(x=1;x<n;x++){
			if(partial[x-1]>partial[x]){
				break;
			}
		}
		//cout<<x<<endl;
		if(isequal(initial,partial,x)){
			cout<<"Insertion Sort"<<endl;
			sort(partial.begin(),partial.begin()+x+1);
		}else{
			cout<<"Merge Sort"<<endl;
			int step=2;
			while(isorder(partial,step)){
				step*=2;
			}
			for(int i=0;i<n;i+=step){
				if(i+step<n){
					sort(partial.begin()+i,partial.begin()+i+step);
				}else{
					sort(partial.begin()+i,partial.end());
				}
			}
		}
		for(int i=0;i<partial.size();i++){
			if(i){
				cout<<" ";
			}
			cout<<partial[i];
		}
		cout<<endl;
	}
	
	#ifndef ONLINE_JUDGE
	fclose(stdin);
	#endif
	return 0;
}


版权声明:

相关文章推荐

1089. Insert or Merge (25)

归并排序和插入排序,和1098类似#include #include using namespace std; const int MAX = 110; int input[MAX],a[MAX],o...

1089. Insert or Merge (25)

According to Wikipedia: Insertion sort iterates, consuming one input element each repetition, and...

PAT 1089. Insert or Merge (25)

1089. Insert or Merge (25) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 16000 ...

1089. Insert or Merge (25)

According to Wikipedia: Insertion sort iterates, consuming one input element each repetition, and g...

1089. Insert or Merge (25)-PAT甲级真题

1089. Insert or Merge (25) According to Wikipedia: Insertion sort iterates, consuming one in...

1089. Insert or Merge (25)

题目有不严谨的地方,比如 10 3 1 2 8 7 5 9 4 6 0 1 2 3 5 7 8 9 4 6 0 这个测试,插入排序,但是9不确定是否排过 #include #in...

1089. Insert or Merge (25)

1089. Insert or Merge (25)   时间限制 200 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standa...

1089. Insert or Merge -25[插入和归并排序]

1. 原题: https://www.patest.cn/contests/pat-a-practise/1089 2. 思路: 题意: 插入与归并排序问题。 思路: 插入排序是前i个元素有...

1089. Insert or Merge (25)

1.根据题意,编写归并排序算法,如下: bool isMerge = false; for (int step = 1; step / 2 < n; step *= 2) {//步进初始为1,...

【PAT】1089. Insert or Merge (25)

According to Wikipedia: Insertion sort iterates, consuming one input element each repetition, and g...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)