python 归并排序

本文详细介绍了归并排序的原理,通过实例解析了如何使用Python实现归并排序算法。归并排序是一种分治策略,通过递归将数组分为两半,分别排序后再合并,确保排序的稳定性。文章还探讨了该算法的时间复杂度和空间复杂度,适合初学者和进阶者学习。
摘要由CSDN通过智能技术生成
#!/usr/bin/env python
# -*- coding:utf8 -*-

def merge_sort(li):
    n = len(li)
    if n <= 1:
        return
    # 1 递归分解,直到不能分为止

    left = li[0: n // 2]
    right = li[n//2:n]

    merge_sort(left)
    merge_sort(right)

    # 2 返回合并,合并步骤1分解出来的两个序列(这两个序列是有序的)
    # 因为我们已经对left和right调用了merge_sort这样的排序函数,所以,left和right已经有序
    # 1)清空原序列li
    li[:] = []
    # 2)left和right合并到li上
    l_index = 0
    r_index = 0
    while l_index < len(left) and r_index < len(right):
        if left[l_index] <= right[r_index]:
            li.append(left[l_index])
            l_index += 1
        else:
            li.append(right[r_index])
            r_index += 1

    # 至此,左右序列其中之一遍历结束
    li += left[l_index:]
    li += right[r_index:]

if __name__ == '__main__':
    li = [5,6,9,3,2,5,8,2,1,4,5,7,6,9]
    merge_sort(li)
    print(li)








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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值