MergeSort 归并排序

 
# 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)

  

归并排序:

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

原文地址:https://www.cnblogs.com/jrri/p/12099937.html