本文全部僞代碼參考自《算法導論(原書第三版)》Thomas H.Cormen等著,殷建平等譯,機械工業出版社。
以前上ACM課的時候老師講過,學長也講過,至於沒聽進去就怪M_E了,其實仍是要怪太依賴STL。python
此次從新理解+拿Python寫了一下,被python的list中C++的vector化有點小坑。算法
1 import math 2 def Merge(A,p,q,r): 3 n1 = q-p+1 4 n2 = r-q 5 L = [] 6 R = [] 7 for i in range(n1) : 8 L.append(A[p+i]) 9 for j in range(n2) : 10 R.append(A[q+j+1]) 11 L.append(float("inf")) 12 R.append(float("inf")) 13 i = 0 14 j = 0 15 for k in range(p,r+1): 16 if L[i] <= R[j]: 17 A[k] = L[i] 18 i = i+1 19 else: 20 A[k] = R[j] 21 j = j+1 22 #del L[:] 23 #del R[:] 24 25 26 def Merge_Sort(A,p,r): 27 if p < r: 28 q = math.floor((p+r)/2) 29 Merge_Sort(A,p,q) 30 Merge_Sort(A,q+1,r) 31 Merge(A,p,q,r) 32 33 34 arr=[1,6,3,2,777,10] 35 Merge_Sort(arr,0,5) 36 print(arr)