归并排序

  归并排序,待排序列表有n个值,则可以看成是n个有序子列表,每个子列表长度为1,然后两两归并,得到n//2个长度为2或者1的子列表,再两两归并,如此重复,直到得到一个长度为n的有序列表。

 

  代码实现

  

# -*- coding = utf-8 -*-
# @Author: Wchime
# @time: 2023/1/27 17:07
# @file: 归并排序.py


def sort_merge(li):
    """归并排序"""
    n = len(li)
    if n <= 1:
        return li
    mid = n//2
    left_li = sort_merge(li[:mid])
    right_li = sort_merge(li[mid:])

    left_p, rigth_p = 0, 0
    res = []
    while left_p <len(left_li) and rigth_p < len(right_li):
        if left_li[left_p] <= right_li[rigth_p]:
            res.append(left_li[left_p])
            left_p += 1
        else:
            res.append(right_li[rigth_p])
            rigth_p += 1
    res += left_li[left_p:]
    res += right_li[rigth_p:]
    return res


if __name__ == "__main__":

    l = [1, 9, 4, 8, 2, 3, 7]
    l = sort_merge(l)
    print(l)

 

posted @ 2023-01-28 17:17  Wchime  阅读(16)  评论(0)    收藏  举报