# MergeSort 归并排序_Python实现
# 归并排序需要两个函数.
# 1. 归并的逻辑
# 2. 归并的两种调用
# 归并逻辑
def merge(left, right):
result = []
while len(left) > 0 and len(right) > 0:
if left[0] <= right[0]:
result.append(left.pop(0))
else:
result.append(right.pop(0))
result += left # 当某一个列表空了的时候才会执行列表之间扩展
result += right
return result
# 列表切割以及调用
def merge_sort(li):
num = len(li) // 2
if num < 1:
return li
# 根据现在列表长度, 将列表分成两个部分
left = merge_sort(li[:num]) # 左侧的列表, 递归调用分割方法一直分下去.直到left为一个元素为止
right = merge_sort(li[num:]) # 右侧的列表, 递归调用分割方法一直分下去. 知道right为一个元素为止
# 当列表分割到只有一个元素的时候, 递归调用的时候就会函数的if入口拦截, 返回这个只包含了一个元素的列表
# 这个时候才执行下面merge函数, 进行排序.
return merge(left, right)
list = [1, 55, 98984, 65, 165, 356, 54, 3, 645, 74, 64, 35] li = merge_sort(list) print(li)
归并排序:
归并排序在实现的思路上和快排很相似. 不过实现的过程使用了两个函数. 因为没有用到迭代, 其实可以融合成一个函数, 不过相对来说两个函数的可读性更好一些