資料結構與演算法(八) 歸併排序的python實現

2021-09-12 12:16:41 字數 1317 閱讀 3592

歸併是分治法的典型應用。

主要思路:

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

歸併排序在python3的實現:

def

merge_sort

(alist)

:'''歸併排序'''

n =len(alist)

if n<=1:

return alist

mid = n//

2#中間位置的下標

left_li = merge_sort(alist[

:mid]

) right_li = merge_sort(alist[mid:])

#left_pointer左邊序列的指標,right_pointer右邊序列的指標,初值都為0

left_pointer,right_pointer =0,

0 result =

while left_pointer<

len(left_li)

and right_pointer<

len(right_li)

:if left_li[left_pointer]

< right_li[right_pointer]:)

left_pointer+=

1else:)

#哪個小追加哪個

right_pointer+=

1 result += left_li[left_pointer:

]#這兩句話執行時,其中乙個是追加空列表

result += right_li[right_pointer:

]#此時需要返回列表

return result

if __name__ ==

"__main__"

: li =[54

,26,93

,17,77

,31,44

,55,20

]print

(li)

sorted_li = merge_sort(li)

print

(sorted_li)

輸出:

[54,

26,93,

17,77,

31,44,

55,20]

[17,20

,26,31

,44,54

,55,77

,93]

時間複雜度分析:

資料結構與演算法 歸併排序

include include include string include include include include algorithm using namespace std void merge vector input,int left,int mid,int right,vector...

資料結構與演算法(歸併排序)

歸併排序是採用分治法的乙個典型的應用,歸併排序的思想就是先遞迴分解陣列,在合併陣列。將陣列分解最小之後,然後合併兩個有序陣列,基本思路是比較兩個陣列的前面的數,誰小就先取誰,取了後相應的指標就往後移一位,直至乙個陣列為空,最後把另乙個陣列的剩餘部分複製過來即可。def merge sort alis...

資料結構與演算法 歸併排序

你可以在 的 mer 標籤中看到歸併排序的動畫。歸併排序 時間複雜度 o nlogn 空間複雜度 o n 基本思想 分治思想。8 6 2 3 1 5 7 4 分 8 6 2 3 1 5 7 4 分 8 6 2 3 1 5 7 4 分 8 6 2 3 1 5 7 4 並 8 6 2 3 1 5 7 4...