歸併排序的實現
分解: 將列表越分越小,直至分成乙個元素
終止條件: 乙個元素是有序的 乙個或者零個
合併: 將兩個有序列表歸併,列表越來越大
:if low < high: #至少有兩個元素,遞迴
歸併排序–歸併
假設現在的列表分段有序,如何將其合成為乙個有序列表
誰小誰出來
#high是最後乙個元素
def merge
(li, low, mid, high)
: i = low
j = mid +
1 ltmp =
while i<=mid and j<=high: # 只要左右兩邊都有數
if li[i]
< li[j]
: ltmp.
(li[i]
) i +=1
else
: ltmp.
(li[j]
) j +=1
# #while執行完 肯定有一部分沒數了所以寫兩個while 有就走哪個
while i <= mid:
ltmp.
(li[i]
) i +=1
while j <= high:
ltmp.
(li[j]
) j +=1
#這是切片
li[low:high+1]
= ltmp
li =[2
,4,5
,7,1
,3,6
,8]merge
(li,0,
3,7)
print
(li)
時間複雜度o(nlogn)
空間複雜度o(n) #歸併需要額外的空間
每一層是n,整個複雜度就是n乘以logn
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...
python歸併排序
coding utf 8 def mergesort seq 遞迴 if len seq 1 return seq mid int len seq 2 left mergesort seq mid right mergesort seq mid return merge left,right def...
Python 歸併排序
歸併排序採用分而治之的方法,遞迴求解。將長度為n的列表分成兩個長度為n 2的子串行 對兩個子串行分別採用歸併排序 將兩個排序好的子串行合併成乙個最終的排序列表 如下 coding utf 8 author dreams file merge sort.py time 2018 7 26 9 29 i...