歸併排序 python實現

2021-10-17 08:46:31 字數 1411 閱讀 9060

介紹:這些演算法通常採用分治策略:將原問題劃分成n個規模較小而結構與原問題相似的子問題,遞迴地解決些子問題,然後再合併其結果,就得到原問題的解。

一般步驟:

分解:將原問題分解成一系列子問題;

解決:遞迴的解個子問題,若子問題足夠,小則直接求解;

合併:將子問題的結果合併成原問題的解;

歸併排序套用得:

分解:將n個元素分成各含n/2個元素的子串行;

解決:用合併排序法對兩個子串行遞迴的排序

合併:合併兩個已排序的子串行已得到排序結果

如圖:python**

def

m(a,p,q,r)

:

k=i=p

j=q+

1while

(i!=q+

1and j!=r+1)

:#迴圈條件

if a[i]

:#比較兩序列第乙個元素,前序列元素較小

k+=1#『插入指標』加一

i+=1#前序列『指標』加一

else

:#後序列元素較小

a.insert(k,a[j]

)#『插入指標』插入較小元素

del a[j+1]

#刪除後序列較小元素

k+=1#『插入指標』加一

i+=1#前序列『指標』加一

j+=1#後序列『指標』加一

q+=1#前序列上限加一

defm_s

(a,p,r)

:if p

q=int(

(p+r)/2

)

m_s(a,p,q)

m_s(a,q+

1,r)

#分 m(a,p,q,r)

#治a=

input()

.split()a=

[int

(a[i]

)for i in

range

(len

(a))

]m_s(a,0,

len(a)-1

)print

(a)

python實現歸併排序

歸併排序,先把陣列按中間分為2個單元,直至每個單元僅包含1個元素,然後依次合併2個單元至一臨時陣列 def merge str,start index,end index,mid,temp j start index k mid 1 i 0while j mid and k end index if...

Python實現歸併排序

def mergesort seq if len seq 1 return seq else mid int len seq 2 lpart mergesort seq mid rpart mergesort seq mid return merge lpart,rpart defmerge lpa...

Python實現歸併排序

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