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

 

posted @ 2015-04-26 19:38  the_Gaven  阅读(183)  评论(0编辑  收藏  举报