topic:
Code:
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
using namespace std;
const int MAXN = 105;
int num[MAXN],tmp[MAXN],val[MAXN];
int n;
bool isSame(int *t,int *v)
{
for(int i=0;i<n;++i)
if(t[i]!=v[i])
return false;
return true;
}
void Print(int *t)
{
for(int i=0;i<n;++i)
if(i==n-1)
printf("%d\n",t[n-1]);
else
printf("%d ",t[i]);
}
bool InsertSort()
{
int tmpNum;
bool flag = false;
for(int i=1;i<n;++i)
{
if(i!=1&&isSame(tmp,val))
flag = true;
int j=i;
tmpNum = tmp[i];
while(j>0&&tmp[j-1]>tmpNum)
{
tmp[j] = tmp[j-1];
j--;
}
tmp[j] = tmpNum;
if(flag)
return true;
}
return false;
}
void MergeSort()
{
bool flag=false;
for(int i=2;i<=2*n;i*=2)
{
if(i!=2&&isSame(tmp,val))
flag = true;
for(int j=0;j<n;j+=i)
sort(tmp+j,tmp+min(n,j+i));
if(flag)
{
Print(tmp);
return;
}
}
}
int main()
{
scanf("%d",&n);
for(int i=0;i<n;++i)
{
scanf("%d",&num[i]);
tmp[i] = num[i];
}
for(int i=0;i<n;++i)
scanf("%d",&val[i]);
if(InsertSort())
{
printf("Insertion Sort\n");
Print(tmp);
}
else
{
printf("Merge Sort\n");
for(int i=0;i<n;++i)
tmp[i] = num[i];
MergeSort();
}
return 0;
}