码迷,mamicode.com
首页 > 其他好文 > 详细

merge sort

时间:2015-04-26 21:08:00      阅读:171      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!