python 資料結構與演算法 day05 歸併排序

2022-02-06 18:24:11 字數 893 閱讀 4890

思路: 逐步把乙個序列拆分,每次拆一半,直到拆成n個元素的序列,拆完之後開始合併,兩個兩個合併,合併完 之後再四個一組合併,依次合併為原來長度的序列;

整個過程使用遞迴

def

merge_sort(l):

"""歸併排序

"""if len(l)==1:

return

l mid=len(l)//2left_list=merge_sort(l[:mid])

right_list=merge_sort(l[mid:])

left_pointer,right_pointer=0,0

result=

while left_pointerand right_pointer<=len(right_list):

if left_list[left_pointer]

left_pointer+=1

else

: right_pointer+=1result+=left_list[left_pointer:]

result+=right_list[right_pointer:]

return

result

l=[5,2,8,3,7,1,9,4]

l_sorted=merge_sort(l)

print

(l)print(l_sorted)

執行結果:

歸併排序時間複雜度 nlog(n) 拆分之後合併的過程,橫向複雜度n (因為總共需要比較n個元素);

縱向時間複雜度是log(n)因為從n個元素的序列逐步合併,最終合併為乙個大的序列 2^k=n  合併的過程總共有log(n)次

所以歸併排序的時間複雜度 nlog(n)

歸併排序是穩定的;

python資料結構與演算法

coding utf 8 import sys 使用以下語句將引數的str格式轉換為int格式 l list map int sys.argv 1 split target int sys.argv 2 def binarysearch print l print target left 0 rig...

資料結構與演算法 python

元類 基礎 冒泡 它重複地走訪要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢 浮 到數列的頂端,故名氣泡排序。def bubble sort alist ...

python演算法與資料結構

若n1 n2 n3 1000,且n1平方 n2平方 n3平方 n1,n2,n3為自然數 求出所有n1 n2 n3可能的組合?n1 0 n2 0 n3 0 判斷n1 n2 n3是否等於1000,之後變n3 1,n3 2,n3 3,然後再變n2 那如果變為 n1 n2 n3 2000 了呢?思路1 實現...