归并排序:基于python实现

归并排序,顾名思义,拆分再合并。

假设此时有两段分别有序的数,通过比较从某一段中拿出较小的一个数,即此时最小的数,放到一个新的列表中,依次执行就能得到一个有序的列表

此时我们假设有两段有序的列表,进行一次排序的代码如下:

def merge(li, low, mid, high):
    i = low
    j = mid + 1
    tmp = []
    while i <= mid and j <= high:
        if li[i] <li[j]:
            tmp.append(li[i])
            i += 1
        else:
            tmp.append(li[j])
            j +=1
    while i<= mid:
        tmp.append(li[i])
        i +=1
    while j <= high:
        tmp.append(li[j])
            j +=1
    li[low:high+1] = tmp

那么?给定两段列表如何保证列表有序?

分解,将列表越分越小,直至一个元素

终止条件,一个元素是有序的

合并,将两个有序的列表合并,列表越来越大

所以用到了递归

def merge_sort(li, low, high):
    if low <high:
        mid = (low + high)//2
        merge_sort(li, low, mid)
        merge_sort(li, mid + 1, high)
        merge(li, low, mid, high)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

还Young

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值