# 合並兩個已排序的序列 merge
# 輸入:已排序的數組A1、A2
# 輸出:合並且排好序的數組B
1 def merge(A1,A2): 2 3 a1 = 0 # 指向數組A1的指針 4 a2 = 0 # 指向數組A2的指針 5 n1 = len(A1)-1 # 數組A1的最大下標 6 n2 = len(A2)-1 # 數組A2的最大下標 7 B = [ 0 for i in range(n1+n2+1)] # 數組B用於存放合並結果,長度為數組A1,A2的長度之和 8 b = 0 # 指向數組B 的指針 9 10 while a1<=n1 and a2<=n2: 11 if A1[a1] <= A2[a2]: 12 B[b] = A1[a1] 13 b = b+1 14 a1 = a1+1 15 else: # A1[a1] > A2[a2] 16 B[b] = A2[a2] 17 b = b+1 18 a2 = a2+1 19 print(B) # 打印填充數組B的過程 20 return B
函數調用
A1 = [-34,-22,-11,2,9,20,30,78,243] A2 = [-88,-20,-2,29,30,66,129] print(merge(A1,A2))
運行結果
[-88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] [-88, -34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] [-88, -34, -22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] [-88, -34, -22, -20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] [-88, -34, -22, -20, -11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] [-88, -34, -22, -20, -11, -2, 0, 0, 0, 0, 0, 0, 0, 0, 0] [-88, -34, -22, -20, -11, -2, 2, 0, 0, 0, 0, 0, 0, 0, 0] [-88, -34, -22, -20, -11, -2, 2, 9, 0, 0, 0, 0, 0, 0, 0] [-88, -34, -22, -20, -11, -2, 2, 9, 20, 0, 0, 0, 0, 0, 0] [-88, -34, -22, -20, -11, -2, 2, 9, 20, 29, 0, 0, 0, 0, 0] [-88, -34, -22, -20, -11, -2, 2, 9, 20, 29, 30, 0, 0, 0, 0] [-88, -34, -22, -20, -11, -2, 2, 9, 20, 29, 30, 30, 0, 0, 0] [-88, -34, -22, -20, -11, -2, 2, 9, 20, 29, 30, 30, 66, 0, 0] [-88, -34, -22, -20, -11, -2, 2, 9, 20, 29, 30, 30, 66, 78, 0] [-88, -34, -22, -20, -11, -2, 2, 9, 20, 29, 30, 30, 66, 78, 129] 合並結果為: [-88, -34, -22, -20, -11, -2, 2, 9, 20, 29, 30, 30, 66, 78, 129]