zoukankan      html  css  js  c++  java
  • 归并排序

    归并排序详解百度一大把,记录一下代码,是cdq分治的基础。

    #include<stdio.h>
    #include<iostream>
    #include<algorithm>
    #include<cstring>
    #include<math.h>
    #include<string>
    #include<map>
    #include<queue>
    #include<stack>
    #include<set>
    #include<ctime>
    #define ll long long
    #define inf 0x3f3f3f3f
    const double pi=3.1415926;
    using namespace std;
    
    const int maxx=10086;
    int a[maxx];///用来排序的数组
    int b[maxx];///原数组
    int n;
    //归并排序
    void merge_sort(int l,int r,int x[])///x数组作为参数,传入
    {
        if(l==r)
            return;
        int mid=(l+r)/2;///取中点
        merge_sort(l,mid,x);
        merge_sort(mid+1,r,x);
        int t1=l,t2=mid+1;
        for(int i=l;i<=r;i++)
        {
            if( (x[t1]<x[t2] && t1<=mid) || t2>r ) ///(当前左子区间的值比较小 并且 左指针还没有超出左边的最大值) 或者 右边已经排完了  就取左边
                a[i]=x[t1++];
            else ///不取左就取右 个数则由for循环保证
                a[i]=x[t2++];
        }
        for(int i=l;i<=r;i++)///对b数组也进行交换
            x[i]=a[i];
    }
    
    
    int main()///merge_sort
    {
        scanf("%d",&n);
        for(int i=0;i<=n;i++)
            b[i]=rand();
        for(int i=0;i<=n;i++)
            printf("%d
    ",b[i]);
        merge_sort(0,n,b);
        for(int i=0;i<=n;i++)
            printf("%d
    ",b[i]);
        return 0;
    }
  • 相关阅读:
    UVa 11181
    UVa 10491
    UVa 1636
    UVa 1262
    UVa 10820
    UVa 1635
    UVa 12716
    [2019杭电多校第六场][hdu6635]Nonsense Time
    [2019杭电多校第五场][hdu6630]permutation 2
    [2019杭电多校第五场][hdu6629]string matching(扩展kmp)
  • 原文地址:https://www.cnblogs.com/shoulinniao/p/11618681.html
Copyright © 2011-2022 走看看