python写归并排序

时间:2022-07-24
本文章向大家介绍python写归并排序,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

python写归并排序

开始今天内容之前,先给大家推荐一款审核利器,goinception,下载地址:

https://github.com/hanchuanchuan/goinception 自从inception闭源之后,对于SQL审核的工具都是各家开发定制各自的,这个项目goinception的审核结果和inception几乎相同,大家可以作为参考,看看是否可以直接拿来定制自己的审核工具。

回来比较晚了,写点python程序吧,python实现归并排序。

归并排序大家可能都不陌生,它的主要逻辑如下:

1、将一个序列拆分为两个序列

2、将这两个子序列按照第一步的方法再进行拆分

3、等到所有的序列都拆分为1个元素的时候,再两两进行排序,合并成一个有序序列即可。

整个排序思路,有一个先分再合的过程,如下:

# 这个函数用来将两个有序序列合并成一个有序序列
def merge(a, b):
    c = []
    h = j = 0
    while j < len(a) and h < len(b):
        if a[j] < b[h]:
            c.append(a[j])
            j += 1
        else:
            c.append(b[h])
            h += 1
    # 如果某个序列被合并完毕,则补齐另外一个序列的剩余值即可
    if j == len(a):
        for i in b[h:]:
            c.append(i)
    else:
        for i in a[j:]:
            c.append(i)
    return c


def merge_sort(lists):
    if len(lists) <= 1:
        return lists
    middle = len(lists)//2
    # 进行拆分
    left = merge_sort(lists[:middle])
    right = merge_sort(lists[middle:])
    return merge(left, right) #递归的思路


if __name__ == '__main__':
    a = [10,14,33,2,39,8,41]
    print (merge_sort(a))

运行结果如下:

[2, 8, 10, 14, 33, 39, 41]

Process finished with exit code 0

执行时间复杂度:N*logN

有帮助的话还希望点下再看哈