merge sort(歸併排序)

merge sort(歸併排序) 是一種採用分治策略的排序方法。最壞時間複雜度爲 O(nlgn)

 

要分析算法運行的時間複雜度,關鍵的就是要列出分治過程中的遞歸式:



然後,複雜度的估算可以使用遞歸樹方法,也可以直接使用主定理來證明。詳情請參考《算法導論》


我實現的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);
    }
}


References:


[1] Thomas H.Cormen Charles E. Leiserson Ronald L.Rivest Clifford Stein 《Introduction to Algorithms Second Edition》

發佈了36 篇原創文章 · 獲贊 4 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章