python排序:归并排序

本文详细解释了归并排序算法的工作原理,强调了在Python中如何通过分治法和递归实现merge_sort函数,以及处理`append`操作时需要注意逐个元素添加而非整体添加的问题。
摘要由CSDN通过智能技术生成

归并排序在于把序列拆分再合并起来,使用分治法来实现,这就意味这要构造递归算法。

def merge(left, right):
    merged = []
    while left and right:
        if left[0] <= right[0]:
            merged.append(left.pop(0))
        else:
            merged.append(right.pop(0))

    while left:
        merged.append(left.pop(0))

    while right:
        merged.append(right.pop(0))

    return merged

def merge_sort(lst):
    if len(lst) <= 1:
        return lst

    mid = len(lst) // 2
    left = merge_sort(lst[:mid])
    right = merge_sort(lst[mid:])

    return merge(left, right)

在Python中,merged.append(left) 这样的操作会将整个 left 列表作为一个元素添加到 merged 列表的末尾,而不是将 left 列表中的元素逐个添加到 merged 列表。因此,我们需要使用循环来逐个添加 left 列表中的元素。
 例如,如果 merged = [1, 2, 3],left = [4, 5, 6],那么 merged.append(left) 之后,merged 的值会变成 [1, 2, 3, [4, 5, 6]],而不是我们期望的 [1, 2, 3, 4, 5, 6]。
 所以,我们需要使用 while left: merged.append(left.pop(0)) 这样的循环来逐个添加 left 列表中的元素。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值