归并排序和插入排序,和1098类似
#include<iostream>
#include<algorithm>
using namespace std;
const int MAX = 110;
int input[MAX],a[MAX],output[MAX];
int n;
bool same(int a[],int b[]){
for(int i=1;i<=n;i++){
if(a[i]!=b[i]) return false;
}
return true;
}
bool InsertSort(){
bool flag=false;
for(int i=2;i<=n;i++){
if(i!=2&&same(output,a)){
flag=true;
}
sort(a,a+i+1);
if(flag==true){
return true;
}
}
return false;
}
void outputa(){
for(int i=1;i<=n;i++){
if(i!=1) printf(" ");
printf("%d",a[i]);
}
}
void inputToA(){
for(int i=1;i<=n;i++){
a[i]=input[i];
}
}
void MergeSort(){
bool flag=false;
for(int i=2;i<=n;i*=2){
if(i!=2&&same(a,output)){
flag=true;
}
int k=1;
while(k<=n){
if(k+i<=n+1){
sort(a+k,a+k+i);
}
else{
sort(a+k,a+n+1);
}
k=k+i;
}
if(flag==true){
return;
}
}
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
scanf("%d",&input[i]);
}
inputToA();
for(int i=1;i<=n;i++){
scanf("%d",&output[i]);
}
if(InsertSort()){
printf("Insertion Sort\n");
outputa();
}
else{
inputToA();
MergeSort();
printf("Merge Sort\n");
outputa();
}
return 0;
}