演算法導論 第二集 合併排序(Python版)

2021-08-21 16:19:43 字數 1058 閱讀 3273

昨晚睡前、今早起床後,抽空看了「分治法」。運用遞迴的思想到合併排序。

我一直對遞迴思想懷有「敬畏」。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個元素...

死磕演算法導論(二)合併排序

將 遞迴 這個概念具體一些,得到的是 分治法 這個思想。分治法的思想,我在這裡摘抄 演算法導論 的內容。分治模式在每一層遞迴上都有三個步驟 分解 將原問題分解成一系列子問題 解決 遞迴地解各子問題。若子問題足夠小,則直接求解 合併 將子問題的結果合併成原問題的解。在圖中,用實現箭頭代表分解問題,用虛...