#include<stdio.h>
#include<algorithm>
#define MAX_N 110
using namespace std;
int n;
int aim[MAX_N];
int ins[MAX_N];
int merg[MAX_N];
bool isSame(int a[],int b[]){
bool flag=true;
for(int i=0;i<n;i++){
if(a[i]!=b[i]){
flag=false;
return false;
}
}
return true;
}
void show(int a[]){
for(int i=0;i<n;i++){
printf("%d",a[i]);
if(i!=n-1) printf(" ");
}
printf("\n");
}
bool insert(){
bool flag=false;
for(int i=1;i<n;i++){
if(i!=1&&isSame(ins,aim)){
flag=true;
}
int key=ins[i];
int j=i;
while(j>0&&ins[j-1]>key){
ins[j]=ins[j-1];
j=j-1;
}
ins[j]=key;
if(flag){
return true;
}
}
return false;
}
void mergesort(){
bool flag=false;
for(int i=2;i/2<=n;i*=2){
if(i!=2&&isSame(aim,merg)){
flag=true;
}
for(int j=0;j<n;j+=i){
sort(merg+j,merg+min(j+i,n));
}
if(flag){
show(merg);
return ;
}
}
}
int main(){
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&ins[i]);
merg[i]=ins[i];
}
for(int i=0;i<n;i++){
scanf("%d",&aim[i]);
}
if(insert()){
printf("Insertion Sort\n");
show(ins);
}
else{
printf("Merge Sort\n");
mergesort();
}
}
1035. 插入与归并(25) PAT乙级&&1089. Insert or Merge (25)PAT甲级
最新推荐文章于 2023-06-08 16:59:04 发布
本文介绍了一种基于传送门概念的排序算法实现,通过插入排序和归并排序两种方法完成特定序列的排序,并展示了如何判断排序过程是否符合预期。代码中详细解释了每一步操作,包括比较数组是否相同、显示数组状态、插入排序的具体步骤以及归并排序的过程。

689

被折叠的 条评论
为什么被折叠?



