#include<iostream>
#include<algorithm>
using namespace std;
bool ifequal(int a[],int b[],int n){
for(int i=0;i<n;i++){
if(a[i]!=b[i]){
return false;
}
}
return true;
}
void print(int a[],int n){
for(int i=0;i<n;i++){
if(i) putchar(' ');
printf("%d",a[i]);
}
}
int main(){
int N,origin[100],frame[100],copy[100],i,j,tmp;
bool isequal;
cin>>N;
for(i=0;i<N;i++) cin>>origin[i];
for(i=0;i<N;i++) cin>>frame[i];
for(i=0;frame[i]<=frame[i+1] && i<N-1;i++);
for(j=++i;origin[j]==frame[j] && j<N;j++);
if(j==N){
cout<<"Insertion Sort"<<endl;
sort(origin,origin+i+1);
print(origin,N);
return 0;
}
for(i=0;i<N;i++) copy[i]=origin[i];
isequal=false;
int step=1;
while(true){
isequal=ifequal(copy,frame,N);
for(i=0;i<N;i+=step){
j=i+step;
if(j>N) j=N;
sort(copy+i,copy+j);
}
if(isequal){
printf("Merge Sort\n");
print(copy,N);
break;
}
if(step>N) break;
step*=2;
}
return 0;
}
PAT(Basic Level)_1035_插入与归并
最新推荐文章于 2021-01-14 11:47:09 发布