
需要注意的地方就是,the initial sequence至少要经过一次排序后才能与the partially sorted sequence比较,否则当输入的两组数据顺序相同时,无法判断是哪种排序。
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn = 110;
int n;
int ori[maxn],partS[maxn],backup[maxn];
bool isEqual(int* a) {
for (int i = 0; i < n; i++) {
if (a[i] != partS[i])return false;
}
return true;
}
int main() {
cin >> n;
for (int i = 0; i < n; i++) {
cin >> ori[i];
backup[i] = ori[i];
}
for (int i = 0; i < n; i++)cin >> partS[i];
for (int i = 2; i <= n; i++) {
sort(ori, ori + i);
if (isEqual(ori)) {
cout << "Insertion Sort" << endl;
sort(ori, ori + i + 1);
for (int j = 0; j < n; j++) {
cout << ori[j];
if (j != n - 1)cout << " ";
}
return 0;
}
}
for (int i = 2; i < n; i *= 2) {
for (int j = 0; j < n; j += i) {
if (j + i <= n) {
sort(backup + j, backup + j + i);
}
else {
sort(backup + j, backup + n);
}
}
if (isEqual(backup)) {
cout << "Merge Sort" << endl;
i *= 2;
for (int j = 0; j < n; j += i) {
if (j + i <= n) {
sort(backup + j, backup + j + i);
}
else {
sort(backup + j, backup + n);
}
}
for (int j = 0; j < n; j++) {
cout << backup[j];
if (j != n - 1)cout << " ";
}
return 0;
}
}
return 0;
}