t题目链接:
https://pintia.cn/problem-sets/994805260223102976/problems/994805286714327040
AC代码(参考网上别人的):
C++的equal()学习(C++ primer上有):
http://c.biancheng.net/view/592.html
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <string>
#include <math.h>
using namespace std;
int n;
//插入排序
void insort(int a[],int b[]){
int key=0;//当匹配到中间序列时,key置1,下次排序后输出,结束程序就行
for(int i=2;i<=n;i++){//插入排序起始为2,结束为n,否则测试点2不通过
sort(a,a+i);//从0~n的插入排序的操作
if(key){
printf("Insertion Sort\n");
printf("%d",a[0]);
for(int j=1;j<n;j++)
printf(" %d",a[j]);
return ;
}
if(equal(a,a+n,b))//equal是一个比较数组的函数
key=1;
}
}
void mesort(int a[],int b[]){
int key=0;
for(int i=2;;i*=2){//这里不给结束条件,是因为当i>n时还要进行一次排序
for(int j=0;j<n;j+=i){//从2~n/2的归并排序
sort(a+j,a+(i+j<n?j+i:n));//注意确定边界
}
if(key){
printf("Merge Sort\n");
printf("%d",a[0]);
for(int j=1;j<n;j++){
printf(" %d",a[j]);
}
return ;
}
if(equal(a,a+n,b))
key=1;
if(i>n)
break;
}
}
int main() {
scanf("%d",&n);
int a1[100],a2[100],b[100];
for(int i=0;i<n;i++){
scanf("%d",&a1[i]);
a2[i]=a1[i];
}
for(int i=0;i<n;i++){
scanf("%d",&b[i]);
}
insort(a2,b);
mesort(a1,b);
return 0;
}