1089. Insert or Merge (25)

来源:互联网 发布:释广德 知乎 编辑:程序博客网 时间:2024/06/18 13:52

归并排序和插入排序,和1098类似

#include<iostream>#include<algorithm>using namespace std;const int MAX = 110;int input[MAX],a[MAX],output[MAX];int n;bool same(int a[],int b[]){for(int i=1;i<=n;i++){if(a[i]!=b[i]) return false;}return true;}bool InsertSort(){bool flag=false; for(int i=2;i<=n;i++){if(i!=2&&same(output,a)){flag=true;}sort(a,a+i+1);if(flag==true){return true;}}return false;}void outputa(){for(int i=1;i<=n;i++){if(i!=1) printf(" ");printf("%d",a[i]);}}void inputToA(){for(int i=1;i<=n;i++){a[i]=input[i];}}void MergeSort(){bool flag=false;for(int i=2;i<=n;i*=2){if(i!=2&&same(a,output)){flag=true;}int k=1;while(k<=n){if(k+i<=n+1){sort(a+k,a+k+i);}else{sort(a+k,a+n+1);}k=k+i;}if(flag==true){return;}}}int main(){cin>>n;for(int i=1;i<=n;i++){scanf("%d",&input[i]);}inputToA();for(int i=1;i<=n;i++){scanf("%d",&output[i]);}if(InsertSort()){printf("Insertion Sort\n");outputa();}else{inputToA();MergeSort();printf("Merge Sort\n");outputa();}return 0;}


0 0