用python刷算法--归并排序算法

归并排序算法流程

并归排序采用的是分治的思想,先将乱序的数组逐级拆分成一个个小部分,最底层每个部分长度为一(各个部分视为有序),然后在将有序的部分按照完全二叉树两两合并逐级往上,直到排序结束

参考如下图片(来源:https://www.cnblogs.com/chengxiao/p/6194356.html)

img

每部分的合并规则如下:

img

用python实现

def mergeSort(intList: list) -> list:
    length = len(intList)
    # 长度为1直接返回
    if length <= 1:
        return intList

    # 先分
    middle = int(length / 2)
    left = mergeSort(intList[:middle])
    right = mergeSort(intList[middle:])

    # 后治
    return merge(left, right)


def merge(left: list, right: list) -> list:
    leftLen = len(left)
    rightLen = len(right)
    # 定义i, j指向左右列表的开始
    i, j = 0, 0
    # 定义临时列表
    temp = []

    while i < leftLen and j < rightLen:
        if left[i] < right[j]:
            # 将左边的值放入temp中
            temp.append(left[i])
            # i++
            i += 1
        else:
            # 将右边的值放入temp
            temp.append(right[j])
            # j++
            j += 1

    # 结束循环后会多有一个列表有余
    if i < leftLen:
        temp = temp+left[i:]
    elif j < rightLen:
        temp = temp + right[j:]

    return temp
posted @ 2020-05-26 15:27  KainHuck  阅读(154)  评论(0编辑  收藏  举报