# 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)
归并排序:
归并排序在实现的思路上和快排很相似. 不过实现的过程使用了两个函数. 因为没有用到迭代, 其实可以融合成一个函数, 不过相对来说两个函数的可读性更好一些