PAT乙级 插入与归并(25)

来源:互联网 发布:Mac打开hosts文件 编辑:程序博客网 时间:2024/05/19 16:23

给你一个整数n,代表序列中有n个整数,给出原序列,和排序的一个中间序列.让你判断这个序列是插入排序还是归并排序,思路就是从头遍历到尾,碰到的第一个后面元素比前面元素小的情况将索引记录下来,之后从该索引之后判断排序序列和原始序列是否后面的元素都相同,如果相同则是插入排序,如果出现不同则是归并排序,之后结果还要输出下一个阶段的排序结果,插入排序比较简单,直接比较输出就ok,归并排序就只能一段一段的使用快排进行排序,最后从头到尾遍历输出就ok.

#include "iostream"#include "string"#include "algorithm"#include "vector"using namespace std;int main(){int n;int temp,i,j;int merlen;bool first = 0;bool flag = 0;//0 insert 1 mergecin>>n;vector<int> orinum,sortnum;for(i=0;i<n;i++){cin>>temp;orinum.push_back(temp);}for(i=0;i<n;i++){cin>>temp;sortnum.push_back(temp);}for(i=1;i<n;i++){if(sortnum[i]<sortnum[i-1]){merlen = i;while(i<n){if(sortnum[i]!=orinum[i]){flag = 1;break;}i++;}}if(flag == 1)break;}if(flag == 0){cout<<"Insertion Sort"<<endl;for(i=0;i<n;i++){if(i==merlen)continue;if(i!=0)cout<<" ";if(sortnum[merlen]<sortnum[i]&&first == 0){first = 1;cout<<sortnum[merlen];cout<<" ";}cout<<sortnum[i];}}else {cout<<"Merge Sort"<<endl;for(i=0;i<(n/(merlen*2));i++){sort(sortnum.begin()+(i*merlen*2),sortnum.begin()+((i+1)*merlen*2));}for(i=0;i<n;i++){cout<<sortnum[i];if(i!=n-1)cout<<" ";}}return 0;}


0 0