1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
| #include <cstdio> #include <vector> #include <algorithm> using namespace std; int n,inp=1,step=2; vector<int> temp,init_seq,part_seq;
void printArr(vector<int> v){ for(int i=0;i<v.size();i++){ if(i!=0) printf(" "); printf("%d",v[i]); }
} bool insert_sort(){ bool flag=false; for(inp=1;inp<init_seq.size();inp++){ sort(init_seq.begin(),init_seq.begin()+inp+1); if (init_seq==part_seq) { flag=true; break; } } return flag; }
bool merge_sort(){ bool flag=false; for(step=2;step/2<n;step*=2){ for(int i=0;i<n;i+=step){ sort(init_seq.begin()+i,init_seq.begin()+min(i+step,n)); } if (init_seq==part_seq) { flag=true; break; } } return flag; }
int main(){ scanf("%d",&n); int x; for(int i=0;i<n;i++) { scanf("%d",&x); init_seq.push_back(x); } for(int i=0;i<n;i++) { scanf("%d",&x); part_seq.push_back(x); } temp=init_seq; bool isinsert=false,ismerge=false; isinsert=insert_sort(); if (isinsert){ inp++; printf("Insertion Sort\n"); sort(init_seq.begin(),init_seq.begin()+inp+1); printArr(init_seq); } init_seq=temp; ismerge=merge_sort(); if (ismerge){ printf("Merge Sort\n"); step*=2; for(int i=0;i<n;i+=step){ sort(init_seq.begin()+i,init_seq.begin()+min(i+step,n)); } printArr(init_seq); } return 0; }
|