题目:https://pintia.cn/problem-sets/994805342720868352/problems/994805377432928256
第一次运用两种排序,归并排序和插入排序,代码非常不熟悉。
归并排序递归和非递归不一样,非递归适合这道题。
#include <cstdio>
#include <algorithm>
using namespace std;
int b[110];
int flag = 0, n;
bool contrast(int a[]){
int i;
for(i = 0; i < n; i++){
if(a[i] != b[i])
return false;
}
return true;
}
void output(int a[]){
for(int i = 0; i < n; i++){
printf("%d", a[i]);
if(i < n - 1)
printf(" ");
}
printf("\n");
}
void insetrionsort(int a[]){
for(int i = 1; i < n; i++){
int temp = a[i], j = i;
while(j > 0 && temp < a[j - 1]){
a[j] = a[j-1];
j--;
}
a[j] = temp;
if(flag){
printf("Insertion Sort\n");
output(a);
flag = 0;
return;
}
if(contrast(a)){
flag = 1;
}
}
}
void mergesort(int a[]){
for(int step = 2; step / 2 < n; step *= 2){
for(int i = 0; i < n; i += step){
int mid = i + step / 2 - 1;
if(mid + 1 < n)
sort(a + i, a + min(i+step, n));
}
if(flag){
printf("Merge Sort\n");
output(a);
flag = 0;
return;
}
if(contrast(a))
flag = 1;
}
}
int main(){
int a[110], c[110];
scanf("%d", &n);
for(int i = 0; i < n; i++){
scanf("%d", a+i);
c[i] = a[i];
}
for(int i = 0; i < n; i++)
scanf("%d", b+i);
insetrionsort(a);
mergesort(c);
return 0;
}