#include<iostream>#include<algorithm>usingnamespace std;intmain(){int n, a[100], b[100], i, j;
cin >> n;for(int i =0; i < n; i++)
cin >> a[i];for(int i =0; i < n; i++)
cin >> b[i];for(i =0; i < n -1&& b[i]<= b[i +1]; i++);//寻找已经有序部分的结尾for(j = i +1; a[j]== b[j]&& j < n; j++);//无序的部分剩下的是否与未经排序的部分相同//因为归并排序对整个数组进行同时排列,而插入排序是从开头一点点排列if(j == n){
cout <<"Insertion Sort"<< endl;sort(a, a + i +2);}else{
cout <<"Merge Sort"<< endl;int k =1, flag =1;while(flag){
flag =0;for(i =0; i < n; i++){if(a[i]!= b[i])
flag =1;}
k = k *2;for(i =0; i < n / k; i++)sort(a + i * k, a +(i +1)* k);//这一步排序是为了模拟每一次归并sort(a + n / k * k, a + n);//这一步是因为在n/k的限制下如果n不能整除k会有一些元素没有排序到所以在这里加以排序}}for(j =0; j < n; j++){if(j !=0)printf(" ");printf("%d", a[j]);}return0;}