#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
bool is(int num1[], int num2[], int n){
for (int i = 0; i < n; i++)
if (num1[i] != num2[i])
return false;
return true;
}
bool insert(int num1[], int num2[], int n){
bool next = false;
for (int i = 1; i < n; i++){
sort(num1, num1 + i + 1);
if (is(num1, num2, n))
next = true;
if (next){
sort(num1, num1 + i + 2);
printf("Insertion Sort\n");
for (int j = 0; j < n; j++)
if (j != n - 1)
printf("%d ", num1[j]);
else
printf("%d", num1[j]);
return true;
}
}
return false;
}
bool merge(int num1[], int num2[], int n){
bool next = false;
for (int i = 2; i <= n * 2; i *= 2){
if (is(num1, num2, n))
next = true;
for (int j = 0; j < n; j += i)
sort(num1 + j, num1 + min(n, j + i));
if (next){
printf("Merge Sort\n");
for (int j = 0; j < n; j++)
if (j != n - 1)
printf("%d ", num1[j]);
else
printf("%d", num1[j]);
return true;
}
}
return false;
}
int main()
{
int n, num1[110], num2[110], temp[110];
scanf("%d", &n);
for (int i = 0; i < n; i++){
scanf("%d", &num1[i]);
temp[i] = num1[i];
}
for (int i = 0; i < n; i++)
scanf("%d", &num2[i]);
if (insert(temp, num2, n))
return 0;
for (int i = 0; i < n; i++)
temp[i] = num1[i];
merge(temp, num2, n);
return 0;
}
PAT甲级1089
最新推荐文章于 2023-01-20 12:49:55 发布