递归排序一个数组:
递归排序总过程:
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)




京公网安备 11010502036488号