(1)歸併排序:
歸併排序是採用分治法的乙個非常典型的應用。歸併排序的思想就是先遞迴分解陣列,再合併陣列。
將陣列分解最小之後,然後合併兩個有序陣列,基本思路是比較兩個陣列的最前面的數,誰小就先取誰,取了後相應的指標就往後移一位。然後再比較,直至乙個陣列為空,最後把另乙個陣列的剩餘部分複製過來即可。
(2)歸併排序分析:
(3)**實現:
1(4)執行結果:defmerge_sort(alist):
2"""
歸併排序
"""3 n =len(alist)
4if n <= 1:
5return
alist
6 mid = n // 2 #
11.0 / 2 = 5.5 11.0 // 2 =5.0(取整除)78
#left_li 採用歸併排序後形成的有序的新的列表
9 left_li = merge_sort(alist[:mid]) #
傳入的是切片分出的新的列表
1011
#right_li 採用歸併排序後形成的有序的新的列表
12 right_li =merge_sort(alist[mid:])
1314
#將兩個有序的子串行合併為乙個新的整體15#
merge(left, right)
16 left_pointer, right_pointer =0, 0
17 result = #
新的列表,用以存放合併結果
1819
while left_pointer < len(left_li) and right_pointer
20if left_li[left_pointer]
2122 left_pointer += 1
23else:24
25 right_pointer += 126#
迴圈結束兩個切片可能還有剩餘,需要將剩下的全部新增到合併結果中
27 result +=left_li[left_pointer:]
28 result +=right_li[right_pointer:]
29return
result
3031
32if
__name__ == "
__main__":
33 li = [54, 26, 93, 17, 77, 31, 44, 55, 20]
34print
(li)
35 sort_list =merge_sort(li)
36print
(li)
37print(sort_list)
(5)時間複雜度:
最優時間複雜度:o(nlogn)
最壞時間複雜度:o(nlogn)
穩定性:穩定
(6)常見排序演算法效率對比:
歸併排序(2 路歸併排序)
遞迴寫法 include define maxn 100 void merge int a,int l1,int r1,int l2,int r2 將陣列a的區間 l1,r1 和區間 l2,r2 合併為乙個有序區間 else while i r1 while j r2 for int i 0 i非遞...
python歸併排序 python 歸併排序
排序思路 1.將陣列分成兩組a,b,建立臨時陣列 c,c長度 a b 2.i,j分別屬於a,b 3.若a i b j 將b j 放入c,j 否則 a i 放入c,i 4.迴圈3步驟,將a或b中剩餘的元素放入c,再將c複製到陣列中 5.遞迴3 4直到a,b序列的長度 1 歸併排序 class merg...
排序 歸併排序
歸併 merge 排序法是將兩個 或兩個以上 有序表合併成乙個新的有序表,即把待排序序列分為若干個子串行,每個子串行是有序的。然後再把有序子串行合併為整體有序序列。歸併 將兩個已經排好序的集合合併到乙個集合眾,並且保證新的集合也是有序的。核心點 只有乙個元素的集合是已經排好序的集合。歸併排序是建立在...