# 将递归分解列表,直至最小(即每个列表仅有一个元素)
# 将列表分解最小之后,递归合并两个列表,即挨个比较两个列表中最前面的元素,谁较小就将谁加入新的列表,而后该列表的下标后移一位,继续比较,直至其中一个列表为空,而后将另一个列表中剩余的元素加入新列表
# 不断合并,直至完全排序完成
# 时间复杂度: O(nlogn)
def merge_sort(array): n = len(array) if n < 2: return array else: mid = n // 2 left = merge_sort(array[0:mid]) right = merge_sort(array[mid:]) left_pointer, right_pointer = 0, 0 result = [] while left_pointer < len(left) and right_pointer < len(right): print(left_pointer, right_pointer) if left[left_pointer] < right[right_pointer]: result.append(left[left_pointer]) left_pointer += 1 else: result.append(right[right_pointer]) right_pointer += 1 result += left[left_pointer:] result += right[right_pointer:] return result