介紹:這些演算法通常採用分治策略:將原問題劃分成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...