python歸併排序

2021-07-22 17:56:22 字數 850 閱讀 2995

#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 merge(left, right):

result =

i, j = 0, 0

while i < len(left) and j < len(right):

if left[i] <= right[j]:

i += 1

else:

j += 1

result += left[i:]

result += right[j:]

return result

if __name__ == '__main__':

seq = [4, 5, 7, 9, 7, 5, 1, 0, 7, -2, 3, -99, 6]

print(mergesort(seq))

思想:left和right是兩個已經排好序的陣列,i和j分別是放在left和right陣列開頭的指標,比較i和j所指數值的大小,

將小一點的數放入空陣列result,且較小數的指標和result的指標分別向前進一。利用以上思想,將乙個陣列一分為二,

遞迴進行歸併排序。

時間複雜度:最好nlogn,最壞nlogn,平均nlogn

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 歸併排序

歸併排序採用分而治之的方法,遞迴求解。將長度為n的列表分成兩個長度為n 2的子串行 對兩個子串行分別採用歸併排序 將兩個排序好的子串行合併成乙個最終的排序列表 如下 coding utf 8 author dreams file merge sort.py time 2018 7 26 9 29 i...

歸併排序(Python)

歸併排序的核心思想 如果要排序乙個陣列,我們先把陣列從中間分成前後兩部分,然後對前後兩部分分別排序,再將排好序的兩部分合併在一起,這樣整個陣列就都有序了。歸併排序的執行效率與要排序的原始陣列的有序程度無關,所以其時間複雜度是非常穩定的,不管是最好情況 最壞情況,還是平均情況,時間複雜度都是o nlo...