我们简单思考两个排序的排序规则
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a;cin>>a;
int b[a];
int c[a];
for(int i=0;i<a;i++)cin>>b[i];
for(int i=0;i<a;i++)cin>>c[i];/*读入数据*/
int i,i1;
for(i=0;i+1<a&&c[i]<c[i+1];i++);//这里我们如果是直接插入排序的话就可以读到前面排好的序列
for(i1=i+1;i1<a&&c[i1]==b[i1];i1++);//之后如果排好的序列之后的序列没有变化就是直接插入排序
if(i1==a)
{
cout << "Insertion Sort" << endl;
sort(b,b+i+2);//将其进行下一次直接插入排序这里直接用sort模拟了
}
else
{
cout << "Merge Sort" << endl;//如果不是就是直接插入排序就是归并排序了
int flag=1;//这个值是为了判断b中的序列是否排到了c序列的样子
int xu=1;//排序用的键值 2 4 8 16序列长度依次变化
while(flag)
{
flag=0;
for( i=0;i<a;i++)
{
if(b[i]!=c[i])flag=1;//如果还没有变成c序列的样子就再将flag变成1
}
xu<<=1;
for(i=0;i<a/xu;i++)
{
sort(b+i*xu,b+(i+1)*xu);//利用归并排序的子方法2 4为子序列长度开始排序
}
i=xu*(a/xu);//看看有没有剩余的序列
if(i!=a)//如果有的话就再把剩余序列排了
{
sort(b+i,b+a);
}
}
}
cout<<b[0];//最后输出
for(int i3=1;i3<a;i3++)cout<<" "<<b[i3];
}