本文所有伪代码参考自《算法导论(原书第三版)》Thomas H.Cormen等著,殷建平等译,机械工业出版社。
第2章 算法基础
分治排序
之前上ACM课的时候老师讲过,学长也讲过,至于没听进去就怪M_E了,其实还是要怪太依赖STL。
这次重新理解+拿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)