分析:模拟归并排序和插入排序,并给出下一趟排序序列,注意归并排序的上限包括整个序列的长度。。
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int origin[110], cop[110], res[110], n, flag;
int istheSame(int arr1[], int arr2[]){
for(int i = 0; i<n; ++i){
if(arr1[i] != arr2[i]) return 0;
}
return 1;
}
int merge(){
cout << "Merge Sort\n";
for(int step = 2; step<=n; step *= 2){
for(int i = 0; i<n; i+=step){
i+step < n ? sort(cop+i, cop+i+step) : sort(cop+i, cop+n);
}
if(flag) return 1;
if(istheSame(cop, res)){
flag = 1;
}
}
return 0;
}
int insert(){
for(int i = 1; i<n; i++){
int j, tem = cop[i];
for(j = i; j>0; j--){
if(cop[j-1] > tem){
cop[j] = cop[j-1];
} else {
break;
}
}
cop[j] = tem;
if(flag) return 1;
if(istheSame(cop, res)){
flag = 1;
cout << "Insertion Sort\n";
}
}
return 0;
}
int main(){
//freopen("aa.txt", "r", stdin);
cin >> n;
for(int i = 0; i<n; i++){
cin >> origin[i];
cop[i] = origin[i];
}
for(int i = 0; i<n; i++){
cin >> res[i];
}
if(!insert()){
for(int i = 0; i<n; i++){
cop[i] = origin[i];
}
merge();
}
for(int i = 0; i<n; i++){
cout << cop[i];
i != n-1 ? cout << " " : cout << '\n';
}
return 0;
}