內排序(七)——二路並歸排序

什麼是二路並歸?

將兩個位置相鄰、並且各自按值有序的子序列合併爲一個按值有序的子序列的過程稱爲二路歸併,如下圖:
在這裏插入圖片描述
如果兩個序列長度不一樣,則會發生越界,此時將長的那個序列直接複製在結尾即可,如下圖:
在這裏插入圖片描述

一趟二路並歸算法的C語言實現如下圖:

void MERGE(keytype X[ ],keytype Z[ ],int s,int u,int v)
{
    int i=s, j=u+1, q=s;
    while(i<=u && j<=v)
        if(X[i]<=X[j])
            Z[q++]=X[i++];
        else
            Z[q++]=X[j++];
        while(i<=u)              //複製第一個子序列的剩餘部分
            Z[q++]=X[i++];
        while(j<=v)               //複製第二個子序列的剩餘部分
            Z[q++]=X[j++];
}

該算法的功能是將兩個位置相鄰且按值有序子序列合併爲一個按值有序的序列

核心思想

二路並歸排序也叫並歸排序,其核心思想如下:
在這裏插入圖片描述
二路並歸排序的完整過程如下圖所示:
在這裏插入圖片描述

算法分析

二路並歸排序的時間複雜度爲O(nlog2n),空間複雜度爲O(n)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章