Python實現歸併排序

2021-08-11 07:22:20 字數 978 閱讀 6273

歸併排序是典型的分治法的應用

思想:先遞迴分解陣列,再合併陣列

原理:將陣列分解最小之後,然後合併兩個有序陣列,基本思想是比較兩個陣列的最前面的數,誰小就取誰,取完後,將相應的指標後移以為。然後再比較,直到乙個陣列為空,最後把另乙個陣列的剩餘部分複製過來即可。

python**實現:

歸併排序

def merge_sort(alist):

if len(alist) <= 1:

return alist

# 二分分解

num = len(alist) / 2

left = merge_sort(alist[:num])

right = merge_sort(alist[num:])

# 合併

return merge(left, right)

def merge(left, right):

'''合併操作,將兩個有序陣列left和right合併成乙個大的有序陣列'''

# left與right的下標指標

l, r = 0, 0

result =

while l < len(left) and r < len(right):

if left[l] < right[r]:

l += 1

else:

r += 1

result += left[l:]

result += right[r:]

return result

alist = [54, 26, 93, 17, 77, 31, 44, 55, 20]

sorted_alist = merge_sort(alist)

print(sorted_alist)

時間複雜度:

最優時間複雜度:o(nlongn)

最壞時間複雜度 :o(nlongn)

穩定性:穩定

python實現歸併排序

歸併排序,先把陣列按中間分為2個單元,直至每個單元僅包含1個元素,然後依次合併2個單元至一臨時陣列 def merge str,start index,end index,mid,temp j start index k mid 1 i 0while j mid and k end index if...

Python實現歸併排序

def mergesort seq if len seq 1 return seq else mid int len seq 2 lpart mergesort seq mid rpart mergesort seq mid return merge lpart,rpart defmerge lpa...

歸併排序python實現

歸併排序在於把序列拆分再合併起來,使用分治法來實現,這就意味這要構造遞迴演算法 首先是乙個例子 原序先通過一半一半的拆分,然後 然後再一步一步的向上合併,在合併的過程中完成了排序,合併排序演算法如下 def merge s1,s2,s 將兩個列表是s1,s2按順序融合為乙個列表s,s為原列表 j和i...