“分治法”的经典应用—归并排序算法的python实现

归并排序算法采用分治法,先递归分解数组,再合并数组。
代码内部流程比较繁琐,需要保持清晰的思路,才能理解其中的原理。如果第一遍尝试有困难,不妨再多推演两遍。
其排序流程演示图如下:
归并排序流程示意图

Python3实现代码如下:

# coding:utf-8

def mergeSort(listx):
    length = len(listx)
    if length <= 1:
        return listx
    #数组分割线:
    split = length // 2
    #递归调用本函数,进行归并排序:
    l_list = mergeSort(listx[:split])
    r_list = mergeSort(listx[split:])
    #定义一个空列表,存储归并排序后的元素:
    mlist = []
    #定义两个游标:
    lCursor, rCursor = 0, 0
    while lCursor < len(l_list) and rCursor < len(r_list):
        if l_list[lCursor] <= r_list[rCursor]:
            mlist.append(l_list[lCursor])
            lCursor += 1
        else:
            mlist.append(r_list[rCursor])
            rCursor += 1
    mlist += l_list[lCursor:]
    mlist += r_list[rCursor:]
    return mlist

#功能测试:
if __name__ == "__main__":
    list = [23, 2, 59, 102, 29, 58, -10, 201, 268, -300]
    print(list)
    list_merge = mergeSort(list)
    print(list)
    print(list_merge)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值