代码实现步骤截图
图一
图二
重要代码片段
def merge(left, right):
'''归并操作,使用deque'''
merged, left, right = [], deque(left), deque(right)
while left and right:
merged.append(left.popleft() if left[0] <= right[0] else right.popleft()) # deque popleft is also O(1)
merged.extend(right if right else left) # 如果 left/right序列相互比较完后还有元素,直接合并到merged中
return merged
代码分析
为了方便对列表的两端进行快速操作, 采用双端链表deque()
在向上合并的过程中,子列表都是有序的,例如图一中的倒数第三个<归并排序适用于子序列有序的数据排序>