最终的精简版
#include<bits/stdc++.h>
using namespace std;
bool flag;
vector<int>a(105,0),b(105,0),c;
int n;
void insert()
{
int i;
for(i=1;i<n;i++)//i要从1开始
{
for(int j=i;j>0&&a[j-1]>a[j];j--) swap(a[j-1],a[j]);// 交换位置
if(a==b) { flag=1;break;}
}
if(flag)
{
i++;
if(i<n) for(int j=i;j&&b[j-1]>b[j];j--) swap(b[j-1],b[j]);
}
}
void merge_sort()
{
puts("Merge Sort");
int i;
for(i=2;i<=n;i*=2)//每组多少个 2 4 8 依次递增的
{
for(int j=0;j+i<=n;j+=i) sort(c.begin()+j,c.begin()+j+i);//以组为单位排序
if(n%i) sort(c.begin()+n/i*i,c.begin()+n);//说明有剩余的 例如 10个人4个一组 会剩2个把剩下的排序
if(c==b) break;
}
i=i*2;
for(int j=0;j+i<=n;j+=i) sort(b.begin()+j,b.begin()+j+i);
if(n%i) sort(b.begin()+n/i*i,b.begin()+n);
}
int main(void)
{
cin>>n;
for(int i=0;i<n;i++) cin>>a[i];
for(int i=0;i<n;i++) cin>>b[i];
c=a;
insert();
if(!flag) merge_sort();
else puts("Insertion Sort");
for(int i=0;i<n;i++)
{
cout<<b[i];
if(i!=n-1) cout<<" ";
}
return 0;
}