#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
void show(int a[],int n)
{
for(int i=0;i<n;i++){
printf("%d",a[i]);
if(i!=n-1) printf(" ");
}
printf("\n");
}
bool cmp(int a[],int b[],int n)
{
for(int i=0;i<n;i++){
if(a[i]!=b[i]) return false;
}
return true;
}
int main()
{
int n;
cin>>n;
int origin[n];
int a[n],b[n];
int i,j;
for(i=0;i<n;i++) scanf("%d",&origin[i]);
for(i=0;i<n;i++){
scanf("%d",&a[i]);
}
for(i=1;i<n-1&&a[i-1]<=a[i];i++);
for(j=i;j<n&&origin[j]==a[j];j++);
if(j==n){
printf("Insertion Sort\n");
sort(a,a+i+1);
show(a,n);
}else{
printf("Merge Sort\n");
int flag=0;
for(int step=2;step/2<=n;step*=2){
for(i=0;i<n;i+=step){
sort(origin+i,origin+min(n,i+step));
}
if(flag==1) break;
if(cmp(origin,a,n)==true) flag=1;
}
show(origin,n);
}
return 0;
}
PAT A 1089 Insert or Merge
最新推荐文章于 2021-02-26 17:40:25 发布