Python 歸併排序演算法

2021-08-03 23:02:18 字數 886 閱讀 5668

歸併排序演算法:空間複雜度為o(n),時間複雜度為o(n log n),演算法穩定,不具有適應性

1、將序列分兩左右兩部分

2、遞迴,重複第一步,直到左右兩部分裡面的元素數量為1

3、合併每個左右的部分,從小到大

4、完成合併

演算法的穩定性是指:對於待排序的序列中,相同項的原來次序不能被改變

演算法的適應性是指:演算法因原序列有序而更高效

def merge_sort(lst):

if len(lst) <= 1:

return lst

mid = len(lst) // 2

print 'left: ', lst[: mid]

print 'right: ', lst[mid:]

print '&&&&&'

left = merge_sort(lst[: mid])

right = merge_sort(lst[mid:])

return merge(left, right)

def merge(left, right):

print 'left: ', left

print 'right: ', right

res =

i, j = 0, 0

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

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

i += 1

else:

j += 1

res += left[i:]

res += right[j:]

print 'res: ', res

print '***'

return res

Python歸併排序演算法

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

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

歸併演算法 歸併排序

歸併演算法 歸併排序 這周需要用到歸併演算法,於是找了找相關的資料,整理如下 歸併排序 merge sort 是利用 歸併 技術來進行排序。歸併是指將若干個已排序的子檔案合併成乙個有序的檔案。兩路歸併演算法 1 演算法基本思路 設兩個有序的子檔案 相當於輸入堆 放在同一向量中相鄰的位置上 r low...