""" 归并排序 典型的分而治之 递归实现分治的效果 """ def merge_sort(alist): if len(alist) <= 1: return alist # 分治排序 mid = len(alist)//2 left = merge_sort(alist[:mid]) right = merge_sort(alist[mid:]) # 合并 return merge(left, right) def merge(left, right): """合并操作,将两个有序数组left[]和right[]合并成一个大的有序数组""" # left 与 right 的下标指针 l, r = 0, 0 result = [] while l < len(left) and r < len(right): if left[l] < right[r]: result.append(left[l]) l += 1 else: result.append(right[r]) r += 1 result += left[l:] result += right[r:] return result