二路归并排序是一种分治算法,它将一个序列拆分成两个子序列,然后递归地对这两个子序列进行排序,最后将两个有序的子序列合并成一个有序的序列。这是一个 Python 的实现:
def merge_sort(arr):if len(arr) <= 1:
return arr
# 将序列拆分成两个子序列
middle = len(arr) // 2
left = arr[:middle]
right = arr[middle:]
# 递归地对子序列进行排序
left = merge_sort(left)
right = merge_sort(right)
# 合并两个有序的子序列
return merge(left, right)
def merge(left, right):
result = []
# 合并两个序列直到其中一个为空
while left and right:
if left[0] < right[0]:
result.append(left.pop(0))
else:
result.append(right.pop(0))
# 将剩余的元素添加到结果中
if left:
result.extend(left)
if right:
result.extend(right)
return result
# 测试
arr = [6, 5, 3, 1, 8, 7, 2, 4]
print(merge_sort(arr)) # 输出 [1, 2, 3, 4, 5, 6, 7, 8]