什麼是二路並歸?
將兩個位置相鄰、並且各自按值有序的子序列合併爲一個按值有序的子序列的過程稱爲二路歸併,如下圖:
如果兩個序列長度不一樣,則會發生越界,此時將長的那個序列直接複製在結尾即可,如下圖:
一趟二路並歸算法的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)