• 归并排序


    #include<iostream>
    #include<algorithm>
    #include<cstdio>
    #include<cstring>
    #define maxn 1010
    using namespace std;
    void merge(int sr[],int tr[],int i,int m,int n)
    {
    /* 将有序的sr[i..m]和sr[m+1..n]归并为有序的tr[i..n] */
        int j,k,l;
        for(j=m+1,k=i;i<=m&&j<=n;k++)/* 将sr中记录由小到大地并入tr */
        {
            if(sr[i]<sr[j])
                tr[k]=sr[i++];
            else tr[k]=sr[j++];
        }
        if(i<=m)
        {
            for(l=0;l<=m-i;l++)
                tr[k+l]=sr[i+l];/* 将剩余的sr[i..m]复制到tr */
        }
        if(j<=n)
        {
            for(l=0;l<=n-j;l++)
                tr[k+l]=sr[j+l];/* 将剩余的sr[j..n]复制到tr */
        }
    }
    void msort(int sr[],int tr1[],int s,int t)
    {/* 将sr[s..t]归并排序为tr1[s..t] */
        int m;
        int tr2[maxn];
        if(s==t)
           tr1[s]=sr[s];
        else
        {
            m = (s+t)/2;/* 将sr[s..t]平分为sr[s..m]和sr[m+1..t] */
            msort(sr,tr2,s,m);/* 递归地将sr[s..m]归并为有序的tr2[s..m] */
            msort(sr,tr2,m+1,t);/* 递归地将sr[m+1..t]归并为有序的tr2[m+1..t] */
            merge(tr2,tr1,s,m,t);/* 将tr2[s..m]和tr2[m+1..t]归并到tr1[s..t] */
        }
    }
    int main()
    {
        int n;
        cin >> n;
        int a[n];
        memset(a,0,sizeof(a));
        for(int i=1;i<=n;i++)
            cin >> a[i];
        msort(a,a,1,n);
        for(int i=1;i<=n;i++)
            cout << a[i] << endl;
        return 0;
    }
    /*过程图见大话数据结构408-412*/
    彼时当年少,莫负好时光。
  • 相关阅读:
    生成微博授权URL及回调地址
    微博三方登录
    celery异步发送短信
    celery配置
    celery原理与组件
    Django----短信验证接口
    Django----图片验证码接口
    编写注册接口
    jwt安装配置
    day19-Exception
  • 原文地址:https://www.cnblogs.com/l609929321/p/6582265.html
Copyright © 2020-2023  润新知