Python學習筆記之歸併排序

2021-09-29 20:07:55 字數 1169 閱讀 8089

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

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

**如下

def

merge_sort

(li)

:# 列表長度小於等於1,直接返回列表

iflen

(li)

<=1:

return li

# 二分分解,設定中間座標mid

mid_index =

len(li)//2

# 歸併左列表

left_li = merge_sort(li[

:mid_index]

)# 歸併右列表

right_li = merge_sort(li[mid_index:])

l_index =

0# 左列表下標

r_index =

0# 右列表下標

result =

# 迴圈歸併左右列表元素

while l_index <

len(left_li)

and r_index <

len(right_li)

:if left_li[l_index]

<= right_li[r_index]:)

l_index +=

1else:)

r_index +=

1# 將左列表比較後剩餘的元素加入列表

result += left_li[l_index:

]# print(result) # 測試效果

# 將右列表比較後剩餘的元素加入列表

result += right_li[r_index:

]# print(result) # 測試效果

return result

if __name__ ==

'__main__'

: li =[31

,42,24

,56,75

,51,22

,65,47

,87]print

(merge_sort(li)

)

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...

學習筆記 歸併排序

基本步驟 1 分界點 mid l r 2 2 遞迴排序 left,right 3 合二為一 include include include include include include include include include include include define ll long l...

自學筆記之歸併排序

自學筆記之歸併排序 歸併排序主要利用了分治思想,它的過程如下 1.分解成子問題 將n個元素分解為兩個具有n 2的子問題。2.遞迴求解子問題 利用遞迴排序這兩個子問題。3.歸併子問題 歸併子問題的解來產生排序好的答案。歸併排序中最終要的一步是將兩個子問題的解合併,在這裡我們設計乙個函式merge a,...