zoukankan      html  css  js  c++  java
  • 1089. Insert or Merge (25)-判断插入排序还是归并排序

    判断插入排序很好判断,不是的话那就是归并排序了。

    由于归并排序区间是2、4、8开始递增的,所以要判断给出的归并排序执行到哪一步,就要k从2开始枚举。

    然后再对每个子区间进行一下sort即可。

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <string.h>
    #include <cmath>
    using namespace std;
    const int maxn=105;
    int num1[maxn],num2[maxn];
    
    int main()
    {
        int n;
        scanf("%d",&n);
        for(int i=0;i<n;i++)
            scanf("%d",&num1[i]);
        for(int i=0;i<n;i++)
            scanf("%d",&num2[i]);
        int p,idx;
        for(idx=0;num2[idx]<=num2[idx+1];idx++);
        p=idx+1;
        for(;num2[p]==num1[p] && p<n;p++);
    //printf("idx:%d p:%d
    ",idx,p);
        if(p==n){
            sort(num2,num2+idx+2);
            printf("Insertion Sort
    ");
            printf("%d",num2[0]);
            for(int i=1;i<n;i++){
                printf(" %d",num2[i]);
            }
        }
        else{
            int k;
            bool flag=true;
            for(k=2;k<=n;k=(k<<1)){
                for(int i=0;i<n;i+=k){
                    for(int j=i;j<i+k-1&&j<n-1;j++){
                        if(num2[j]>num2[j+1]){
                            flag=false;
                            break;
                        }
                    }
                    if(!flag)
                        break;
                }
                if(!flag)
                    break;
            }
            for(int i=0;i<n;i+=k){
                if(i+k-1<n){
                    sort(num2+i,num2+i+k);
                }
                else
                    sort(num2+i,num2+n);
            }
            printf("Merge Sort
    ");
            printf("%d",num2[0]);
            for(int i=1;i<n;i++){
                printf(" %d",num2[i]);
            }
        }
        return 0;
    }
    View Code
  • 相关阅读:
    阿里云SLB的http强制转https
    nginx反向代理springboot的jar包
    阿里云Centos7上添加swap分区
    AWS云怎么删除信用卡账户
    Linux记录别人操作
    Jumpserver里常用的sudo权限
    端口一览表
    网络端口及其详解
    阿里云安全防坑指南
    LINUX添加只读用户(查日志专用)
  • 原文地址:https://www.cnblogs.com/chenxiwenruo/p/6388877.html
Copyright © 2011-2022 走看看