zoukankan      html  css  js  c++  java
  • merge sort

    merge sort 是一种采用分治策略的排序方法。其最坏时间复杂度为 O(nlgn)  (对数以2为底)

    可以先列出递归式,然后画递归树来证明.  也可以用master theorem (主定理)来证明.

    总之,最关键的就是要列出分治过程中的递归式

    merge sort的递归式为:

    C++ 代码如下所示:

    /*  MAXN为A的长度上限 
        inf 是一个大整数  
        数组计数从0开始  
    */
    
    void merge(int A[],int p,int m,int q) {
        int i,j,k;
        int L[MAXN+1], R[MAXN+1];
    
        i = j = 0;
        for(k = p ; k <= m ; k ++)
        {
            L[i++] = A[k];
        }
        for(k = m+1 ; k <= q ; k ++)
        {
            R[j++] = A[k];
        }
        L[i] = R[j] = inf;
    
        i = j = 0;
        for(k = p ; k <= q ; k ++)
        {
            if(L[i] < R[j]) {
                A[k] = L[i++];
            }
            else {
                A[k] = R[j++];
            }
        }
    }
    
    void merge_sort(int A[] , int p,int q) {
        if(q > p) {
            int m=(p+q)/2;
            merge_sort(A,p,m);
            merge_sort(A,m+1,q);
            merge(A,p,m,q);
        }
    }
  • 相关阅读:
    ASP.Net 反射显示
    ASP.Net 反射简单工厂模式
    ASP.Net MVC生成验证码
    ASP.Net EF架构
    ASP.Net 邮箱发送
    ASP.Net 反射简单
    ASP.Net 显示
    新年快乐
    测试开发比
    Linkbot介绍
  • 原文地址:https://www.cnblogs.com/zhangzph/p/4458217.html
Copyright © 2011-2022 走看看