首页 > 其他 > 详细

merge sort

时间:2015-04-26 21:06:58      阅读:253      评论:0      收藏:0      [点我收藏+]

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);
    }
}

 

merge sort

原文:http://www.cnblogs.com/zhangzph/p/4458217.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!