昨晚睡前、今早起床後,抽空看了「分治法」。運用遞迴的思想到合併排序。
我一直對遞迴思想懷有「敬畏」。o(∩_∩)o,至少在寫**時時很簡潔、漂亮的。
只是大概明白合併排序的流程,導致程式設計時出現了思緒不清。遞迴不知道怎麼寫。
a = [8,2,6,1,4,5,7,3,0,9]
#合併排序(遞迴思想)
def merge_sort(lists):
if len(lists) <= 1:
return lists
num = int( len(lists) / 2 )
left = merge_sort(lists[:num])
right = merge_sort(lists[num:])
return merge(left, right)
def merge(left,right):
r, l=0, 0
result=
while lif left[l] < right[r]:
l += 1
else:
r += 1
result += left[l:]
result += right[r:]
print("*******",result,"*******")
return result
print(merge_sort(a))
'''執行流程:
******* [2, 8] *******
******* [1, 4] *******
******* [1, 4, 6] *******
******* [1, 2, 4, 6, 8] *******
******* [5, 7] *******
******* [0, 9] *******
******* [0, 3, 9] *******
******* [0, 3, 5, 7, 9] *******
******* [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] *******
'''
演算法導論 第二章演算法入門 合併排序
include include include include using namespace std 讀入檔案 void inputfile vector vec 合併程式 void merge vector vec,int p,int r,int q for j 1 j n2 j 這個是作為哨兵...
學習《演算法導論》第二章 合併排序 總結
分治策略 將原問題劃分成n個規模較小而結構與原問題相似的子問題 遞迴地解決這些子問題,然後再合併其結果,就得到原問題的解.分治模式一般有三個步驟 分解 將原問題分解成一系列子問題 解決 遞迴地解決各子問題 合併 將子問題的結果合併成原問題的解 合併排序直觀地操作如下 分解 將n個元素分成n 2個元素...
死磕演算法導論(二)合併排序
將 遞迴 這個概念具體一些,得到的是 分治法 這個思想。分治法的思想,我在這裡摘抄 演算法導論 的內容。分治模式在每一層遞迴上都有三個步驟 分解 將原問題分解成一系列子問題 解決 遞迴地解各子問題。若子問題足夠小,則直接求解 合併 將子問題的結果合併成原問題的解。在圖中,用實現箭頭代表分解問題,用虛...