歸併排序是採用分治法的乙個非常典型的應用。歸併排序的思想就是先遞迴分解陣列,再合併陣列。
將陣列分解最小之後,然後合併兩個有序陣列,基本思路是比較兩個陣列的最前面的數,誰小就先取誰,取了後相應的指標就往後移一位。然後再比較,直至乙個陣列為空,最後把另乙個陣列的剩餘部分複製過來即可。
**如下
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,...