python實現歸併演算法

2021-09-19 08:13:12 字數 1100 閱讀 4341

歸併排序是採用分治法的乙個非常典型的應用,另乙個可以採用分治法的是快速排序,歸併演算法比快速排序速度稍低。歸併排序的思想就是先遞迴分解陣列,再合併陣列。

將陣列分解最小之後,然後合併兩個有序陣列,基本思路是比較兩個陣列的最前面的數,誰小就先取誰,取了後相應的指標就往後移一位。然後再比較,直至乙個陣列為空,最後把另乙個陣列的剩餘部分複製過來即可。

如 設有數列

初始狀態:6,202,100,301,38,8,1

第一次歸併後:,,,,比較次數:3;

第二次歸併後:,,比較次數:4;

第三次歸併後:,比較次數:4;

總的比較次數為:3+4+4=11;

逆序數為14;

python實現:

def merge_sort(alist):

"""遞迴分治序列

:param alist:

:return:

"""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):

"""合併操作

:param left:

:param right:

:return:

"""l, r = 0, 0

result =

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

if left[l] < right[r]: # 篩選排序將left與right最小元素按序加入新序列

Python歸併演算法原理和實現

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

python實現歸併排序演算法

歸併排序是典型的分治法的應用 思想 先遞迴分解陣列,再合併陣列 原理 將陣列分解最小之後,然後合併兩個有序陣列,基本思想是比較兩個陣列的最前面的數,誰小就取誰,取完後,將相應的指標後移以為。然後再比較,直到乙個陣列為空,最後把另乙個陣列的剩餘部分複製過來即可。實現 歸併排序 def merge so...

演算法導論 python實現歸併排序

def merge a,p,q,r n1 q p 1 n2 r q l list range n1 1 r list range n2 1 for i in range 0 n1 l i a p i for j in range 0 n2 r j a q j 1 l n1 10000 這裡可以使用無...