递归排序一个数组:
递归排序总过程:
merge过程:
# 主函数,传递数组 def mergeSort(arr): if arr and len(arr) < 2: return arr process(arr, 0, len(arr) - 1) return arr # 把arr[L....R]上排好序(递归),调用merge(合并)方法 def process(arr, L, R): # base case: if L == R: return arr mid = L + ((R - L) >> 1) process(arr, L, mid) process(arr, mid + 1, R) merge(arr, L, mid, R) # 创建一个空数组,将process方法排序好的两个数组,谁小,追加到末尾 def merge(arr, L, M, R): help = [] i, p1, p2 = 0, L, M + 1 while p1 <= M and p2 <= R: if arr[p1] <= arr[p2]: # 谁小追加到help数组末尾 help.append(arr[p1]) p1 += 1 else: help.append(arr[p2]) p2 += 1 i += 1 while p1 <= M: help.append(arr[p1]) i += 1 p1 += 1 while p2 <= R: help.append(arr[p2]) i += 1 p2 += 1 # 将help数组中已排序好的数组,修改进arr中 for i in range(len(help)): arr[L + i] = help[i] arr = [3, 2, 4, 6, 8, 9, 6, 42, 13, 4, 56, 65] ans = mergeSort(arr) print(ans)