题意:
输入一个正整数N(<=100),接着输入两行N个整数,第一行表示初始序列,第二行表示经过一定程度的排序后的序列。输出这个序列是由插入排序或者归并排序得到的,并且下一行输出经过再一次排序操作所得到的序列。数据保证了不会有两种排序方式都可以得到的序列。
AAAAAccepted code:
1 #define HAVE_STRUCT_TIMESPEC 2 #include<bits/stdc++.h> 3 using namespace std; 4 int a[107]; 5 int b[107]; 6 int main(){ 7 ios::sync_with_stdio(false); 8 cin.tie(NULL); 9 cout.tie(NULL); 10 int n; 11 cin>>n; 12 for(int i=1;i<=n;++i) 13 cin>>a[i]; 14 for(int i=1;i<=n;++i) 15 cin>>b[i]; 16 int pos=0; 17 for(int i=n;i;--i) 18 if(a[i]!=b[i]){ 19 pos=i; 20 break; 21 } 22 int flag=1; 23 int loc=0; 24 for(int i=1;i<n;++i) 25 if(b[i]>b[i+1]){ 26 loc=i; 27 break; 28 } 29 for(int i=loc+1;i<=n;++i) 30 if(a[i]!=b[i]){ 31 flag=0; 32 } 33 if(flag){ 34 cout<<"Insertion Sort "; 35 sort(a+1,a+1+loc+1); 36 for(int i=1;i<=n;++i){ 37 cout<<a[i]; 38 if(i<n) 39 cout<<" "; 40 } 41 } 42 else{ 43 cout<<"Merge Sort "; 44 int t=1; 45 while(1){ 46 int flag=0; 47 for(int i=1;i<=n;++i) 48 if(a[i]!=b[i]){ 49 flag=1; 50 break; 51 } 52 t*=2; 53 for(int i=1;i<=n/t;++i) 54 sort(a+(i-1)*t+1,a+i*t+1); 55 sort(a+n/t*t+1,a+n+1); 56 if(!flag) 57 break; 58 } 59 for(int i=1;i<=n;++i){ 60 cout<<a[i]; 61 if(i<n) 62 cout<<" "; 63 } 64 } 65 return 0; 66 }