• 归并排序练习.


    今日看了算导上关于归并排序的思想没看伪代码试着自己先练习下:

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<time.h>
    using namespace std;
    #define inf 2147483647+5
    int b[1200];
    void MergeSort(int a[],int l,int r)
    {
        if(l==r) {
            return;
        }
        else{
            int mid=(l+r)/2,t1=l,t2=mid+1;
            MergeSort(a,l,mid);
            MergeSort(a,mid+1,r);
            for(int i=l;i<=r;++i) b[i]=a[i];    
        for(int i=l;i<=r;++i){
            if(t1==mid+1) {a[i]=b[t2++];continue;}
            if(t2==r+1)   {a[i]=b[t1++];continue;}
            if(b[t1]<=b[t2]) a[i]=b[t1++];
            else             a[i]=b[t2++];
        }
        }
    }
    int main()
    {
        int a[1005],b[1005],n,m,i,j;
        while(cin>>n){
            for(i=1;i<=n;++i) a[i]=rand()%10000-333;
            MergeSort(a,1,n);
            for(i=1;i<=n;++i) printf("%d%c",a[i],i==n?' ':' ');
        }
        return 0;
    }

    注意红色处合并完左右两部分以后a中只是中点两边各有序a不一定有序,我们还需要O(N)的复杂度对a进行调整,先将此时范围a拷贝至b中,在从b向a中每次选出最小值传入,类似于两个栈的操作.

    这只是第一次随手写的暂时未发现问题,以后写的更好再更.

  • 相关阅读:
    1619: 【例 1】Prime Distance
    Apache的架构师们遵循的30条设计原则(转帖)
    DP秒思维
    dsu on tree入门
    莫队入门
    行列式与霍尔基夫矩阵
    高精度板子
    splay入门
    回文自动机入门
    AC自动机
  • 原文地址:https://www.cnblogs.com/zzqc/p/7122826.html
Copyright © 2020-2023  润新知