歸併排序(Python3)

2021-08-18 23:36:56 字數 753 閱讀 5455

歸併排序的思想是分而治之。

首先將含有n個元素的列表拆分成兩個含n/2個元素的兩個子列表,在進行歸併排序之前,希望這兩個子列表是排好序的,就可以利用遞迴的思想,繼續拆分並排序(最後拆分成n個子列表),然後合併兩個已排好序的子列表。

對於乙個含n個元素的列表,需要log2^n步把整個列表拆分成子列表,每一步至多需要比較n次,所以歸併排序最多需要n*log2^n次比較,是一種最為常見的排序演算法。

print("歸併排序")

c=[7,9,1,0,4,3,8,2,5,4,6]

#合併兩列表

def merge(a,b):#a,b是待合併的兩個列表,兩個列表分別都是有序的,合併後才會有序

merged =

i,j=0,0

while iif a[i]<=b[j]:

i+=1

else:

j+=1

merged.extend(a[i:])

merged.extend(b[j:])

return merged

#遞迴操作

def merge_sort(c):

if len(c)<=1:

return c

mid = len(c)//2#除法取整

a = merge_sort(c[:mid])

b = merge_sort(c[mid:])

return merge(a,b)

merge_sort(c)

Python3 歸併排序

參考 菜鳥教程 歸併排序 merge sort 採用分治法 divide and conquer 1 分割 遞迴地把當前序列平均分割成兩半 2 整合 在保持元素順序的同時將上一步得到的子串行整合到一起 歸併 歸併排序 實現 def merge arr,l,m,r 在arr中選取一段,l為起始元素索引...

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