歸併排序
基本思想:分治演算法。將已有序的子串行合併,得到完全有序的序列;即先使每個子串行有序,再使子串行段間有序(二路歸併就是指將兩個有序表合併成乙個有序表)歸併排序重要分以下三個部分:
1. 把要排序的區間平均切分成兩個部分
2. 分治演算法,對左右兩個小區間進行同樣方式的排序,直到size == 1(有序) && size == 0(沒有數)
3. 合併左右兩個有序區間到乙個有序區間(需要利用額外空間)
//合併兩個區間為乙個區間
實現歸併排序演算法:
//歸併排序演算法
void
mergesortinner
(int
array,
int low,
int high,
int[
] extra)
//2.劃分成兩個有序區間
int mid = low +
(low + high)/2
;//分治演算法處理兩個小區間
mergesortinner
(array, low, mid, extra)
;mergesortinner
(array, mid, high, extra)
;//3.合併兩個區間為乙個區間
merge
(array, low, mid, high, extra)
;}
歸併排序特性總結:
歸併排序採用分治演算法
歸併排序的思考更多的是解決在磁碟中的外排序問題
時間複雜度:最好、最壞、平均都是o(n*log(n))
空間複雜度:o(n)
穩定性:穩定
資料結構 排序演算法之歸併排序
基本思想 將待排序的元素序列分成兩個等長的子串行,再將子串行劃分子串行,直到子串行中只有乙個元素就不用在對子序列繼續進行劃分,將劃分的每個區塊,進行排序,然後再將其歸併到乙個序列中,直到將所有的子串行歸併完成之後,則這個序列就完成了排序。1 基本思想如下所示 經過上面的劃分,從而可以看出經過劃分與歸...
資料結構 排序演算法之歸併排序
演算法思想 歸併排序是利用歸併的思想實現的排序方法,該演算法採用 分而治之 的思想將問題分成一些小的問題然後遞迴實現,最後合而為之。實現 遞迴實現 void merge int arr,const int left,const int mid,const int right,int temp whi...
資料結構之歸併排序
介紹 歸併排序是建立在歸併操作上的一種有效的排序演算法,效率為o nlogn 歸併排序的實現分為遞迴實現與非遞迴 迭代 實現。遞迴實現的歸併排序是演算法設計中分治策略的典型應用,我們將乙個大問題分割成小問題分別解決,然後用所有小問題的答案來解決整個大問題。非遞迴 迭代 實現的歸併排序首先進行是兩兩歸...