歸併排序是建立在歸併操作上的一種有效的排序演算法,該演算法是分治法的乙個典型應用。將已有序的子串行合併,得到完全有序的序列,即先使每個子串行有序,在使子串行段間有序。若將兩個有序表合併為乙個有序表,稱為二路歸併。
如圖,從下往上,每一步都需將兩個已經有序的子串行合併成乙個大的有序陣列
//合併兩個有序陣列
function merge(&$arr, $low, $mid, $high)else
}//剩下其中乙個陣列的情況
while ($low<=$mid)
//剩下另乙個陣列的情況
while ($j<=$high)
unset($temp); //釋放臨時陣列
}//遞迴呼叫
歸併排序的時間複雜度為 o(nlogn),空間複雜度為 o(n)。但是它是穩定的排序演算法,因為兩兩的歸併,它們之間是基於相鄰元素之間的比較。
PHP 實現歸併排序演算法
下列 來自 五分鐘學演算法,演示了歸併演算法的原理和步驟。原理 利用遞迴,先拆分 後合併 再排序。步驟 歸併排序主程式 function mergesort arr 遞迴結束條件,到達這步的時候,陣列就只剩下乙個元素了,也就是分離了陣列 mid intval len 2 取陣列中間 left arr...
PHP 實現歸併排序演算法
下列 來自 五分鐘學演算法,演示了歸併演算法的原理和步驟。原理 利用遞迴,先拆分 後合併 再排序。步驟 歸併排序主程式 function mergesort arr 遞迴結束條件,到達這步的時候,陣列就只剩下乙個元素了,也就是分離了陣列 mid intval len 2 取陣列中間 left arr...
PHP 實現歸併排序(Merge Sort)
歸併排序時間複雜度屬於o nlogn 級別的,相比於o n 2 級別的排序演算法,在處理大的資料量時,它的優勢非常明顯,下面通過原理圖和 演示介紹歸併排序是如何實現o nlogn 時間複雜度級別的。在學習歸併排序之前,先學習一下使用臨時空間將陣列中有序的兩個部分歸併成乙個有序部分的原理圖 tips ...