6 6 歸併排序

2022-08-19 22:06:10 字數 1924 閱讀 5586

(1)歸併排序:

歸併排序是採用分治法的乙個非常典型的應用。歸併排序的思想就是先遞迴分解陣列,再合併陣列。

將陣列分解最小之後,然後合併兩個有序陣列,基本思路是比較兩個陣列的最前面的數,誰小就先取誰,取了後相應的指標就往後移一位。然後再比較,直至乙個陣列為空,最後把另乙個陣列的剩餘部分複製過來即可。

(2)歸併排序分析:

(3)**實現:

1

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)

(4)執行結果:

(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 排序法是將兩個 或兩個以上 有序表合併成乙個新的有序表,即把待排序序列分為若干個子串行,每個子串行是有序的。然後再把有序子串行合併為整體有序序列。歸併 將兩個已經排好序的集合合併到乙個集合眾,並且保證新的集合也是有序的。核心點 只有乙個元素的集合是已經排好序的集合。歸併排序是建立在...