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;
}


在Sqlite中通过Replace来实现插入和更新

你可能在批量处理一个事务的时候,想要批量插入一系列的数据,但是这些数据当添加完一次之后,重新添加的时候,你不想要重新添加,只是想将原有的数据进行更新,例如:我想要通过Excel将一系列的图书导入到数据...
  • wangjia55
  • wangjia55
  • 2013年05月15日 14:27
  • 3801

MERGE语句用来合并UPDATE和INSERT语句,一张表的大数据操作,要同时进行增删改,提高性能

该命令使用一条语句从一个或者多个数据源中完成对表的更新和插入数据. ORACLE 9i 中,使用此命令必须同时指定UPDATE 和INSERT 关键词,ORACLE 10g 做了如下改动。 1,in...
  • JesseCary
  • JesseCary
  • 2017年03月06日 20:44
  • 1232

为啥各种系统库的头文件都找不到呢

root@Ubuntu32:/home/zhangbin/streaming/WFD/miracast-emu# ls /usr/include | grep "types" caca_types....
  • commshare
  • commshare
  • 2013年05月27日 20:01
  • 4031

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

1089. Insert or Merge (25) According to Wikipedia: Insertion sort iterates, consuming one in...
  • liuchuo
  • liuchuo
  • 2016年07月21日 19:20
  • 249

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

1. 原题: https://www.patest.cn/contests/pat-a-practise/1089 2. 思路: 题意: 插入与归并排序问题。 思路: 插入排序是前i个元素有...
  • shepherd2010
  • shepherd2010
  • 2017年02月21日 14:44
  • 277

【PAT】1089. Insert or Merge (25)

According to Wikipedia: Insertion sort iterates, consuming one input element each repetition, and g...
  • realxuejin
  • realxuejin
  • 2015年10月22日 16:13
  • 508

PAT 1088 1089. Insert or Merge (25)(排序啊)

PAT 1088 1089. Insert or Merge (25)(排序啊)
  • u012860063
  • u012860063
  • 2015年04月19日 19:06
  • 991

1089. Insert or Merge (25)【排序】——PAT (Advanced Level) Practise

题目信息1089. Insert or Merge (25)时间限制200 ms 内存限制65536 kB 代码长度限制16000 BInsertion sort iterates, consum...
  • xianyun2009
  • xianyun2009
  • 2016年05月14日 20:18
  • 3123

1089. Insert or Merge (25)解题报告

每排序一步就比较一次。姥姥有更好的办法。但是我比较笨,喜欢简单而又粗暴的方法。其实相同的题目在乙级里面做过……#include #include #include #define N 1000b...
  • chr1991
  • chr1991
  • 2016年12月28日 14:03
  • 95

1089. Insert or Merge (25)

题目: According to Wikipedia: Insertion sort iterates, consuming one input element each repeti...
  • Yangsongtao1991
  • Yangsongtao1991
  • 2015年03月02日 19:28
  • 469
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:1089. Insert or Merge (25)
举报原因:
原因补充:

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