首先將很長的序列進行分組
,然後對其進行排序,然後將相鄰的分組合併
…
如此重複,直至得到乙個有序序列。
func
mergesort
(arr [
]int)[
]int
// 中間點
mid := length /
2// 遞迴
leftarr :=
mergesort
(arr[
:mid]
) rightarr :=
mergesort
(arr[mid:])
// 歸併
return
merge
(leftarr, rightarr)
}func
merge
(left [
]int
, right [
]int)[
]int
else
}// 把沒有結束的歸併過來
forlen
(left)!=0
forlen
(right)!=0
return result
}
可以參考:
獨孤呆博的博文 35. 排序演算法(8):歸併排序的迭代實現
歸併排序的時間複雜度為o(nlogn)。
歸併排序在合併的時候都需要進行兩兩比較,所以它是一種穩定排序演算法。
排序演算法6 歸併排序
1.什麼是歸併排序 歸併排序是建立在歸併操作上的一種有效的排序演算法。該演算法是採用分治法 divide and conquer 的乙個非常典型的應用。將已有序的子 序列合併,得到完全有序的序列 即先使每個子串行有序,再使子串行段間有序。若將兩個有序表合併成乙個有序表,稱為2 路歸併。2.演算法步驟...
高階排序演算法之歸併排序
歸併排序演算法的時間複雜度能達到nlog n 歸併排序演算法的基本思想 歸併排序演算法是把資料逐次分割成每塊,對每塊進行排序後,然後再進行合併成為乙個排好序的資料。第一步 資料平均分割 第二步 再次對資料進行平均分割,直到資料無法再分割,也就是每份資料只有乙個了,然後再對每份資料進行合併,依次向上進...
排序 6 歸併排序
參考 排序 0 前言 將序列分為若干個子串行 子串行均有序 兩兩子串行進行歸併操作,得到乙個新的有序列表,最終歸併所有子串行,得到乙個遞增或遞減的序列 從左到右逐個比較兩個子串行中的元素大小,比如進行遞增排序,將較小的元素加入結果序列中,其下標加1,繼續和另乙個序列元素進行比較,直到某乙個序列元素已...