#include <iostream>
#include <algorithm>
using namespace std;
int N;
bool judge(int s1[],int s2[]){
for(int i=0;i<N;i++){
if(s1[i]!=s2[i]) return false;
}
return true;
}
void mergesort(int s[],int step){
for(int i=0;i*step<N;i++){
int up=min(N,(i+1)*step);
sort(s+(i*step),s+up);
}
}
int main(){
scanf("%d",&N);
int initial[150],process[150],initial2[150];
for(int i=0;i<N;i++){
scanf("%d",&initial[i]);
initial2[i]=initial[i];
}
for(int i=0;i<N;i++)
scanf("%d",&process[i]);
bool insert=false;
for(int i=1;i<N;i++){
sort(initial,initial+i+1);
if(judge(initial,process)){ //使用的是插入排序
printf("Insertion Sort\n");
sort(process,process+i+2);
for(int j=0;j<N;j++)
j!=N-1?printf("%d ",process[j]):printf("%d",process[j]);
return 0;
}
}
printf("Merge Sort\n");
for(int i=2;i/2<N;i=2*i){
int step=min(i,N);
mergesort(initial2,step);
if(judge(initial2,process)){
step=min(i*2,N);
mergesort(process,step);
for(int j=0;j<N;j++)
j!=N-1?printf("%d ",process[j]):printf("%d",process[j]);
return 0;
}
}
return 0;
}
PAT A1089
最新推荐文章于 2020-07-04 21:36:21 发布