【Python】归并排序算法,摸鱼失败的第二天

首先要看懂归并排序就先要学习递归

        怎么学习递归?最佳答案:http://www.baidu.com                        

                ​​​​​​​        ​​​​​​​        ​​​​​​​        

好然后就是学习归并的基础思想

        就是将数据分组然后进行比较

 

 进行比较后“合体”

 从小开始比较:

        14和22比  14<22

                14先下   然后22和23比  22<23

                        23先下   。。。。以此类推到完成

注意:就会有人问万一一边走完了一边还剩咋办?直接加上就好了因为在总排序前所有的都已经相对已经有序了

代码:

def merge(left, right):
    # 合并两个有序列表
    s = []# 储存列表
    while len(left) > 0 and len(right) > 0:# 两旁只要有一个还剩就不会停
        if left[0] < right[0]:
            s.append(left.pop(0))
        #     pop的作用
        # list.pop([index = -1])
        # 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
        else:
            s.append(right.pop(0))
    #          比完后那边还剩就把那边剩于的加入储存列表中
    if left:

        s.extend(left)

    if right:
        s.extend(right)

    return s


def mergeSort(arr):
    # 归并函数
    n = len(arr)
    if n < 2:
        return arr
    middle = n // 2
    #列表中的知识自己www.baidu.com
    left = arr[:middle]  # 取序列左边部分

    right = arr[middle:]  # 取序列右边部分

    # 对左边部分序列递归调用归并函数
    left1 = mergeSort(left)
    # 对右边部分序列递归调用归并函数
    right1 = mergeSort(right)

    return merge(left1, right1)


if __name__ == '__main__':
    a = [4, 7, 8, 10, 3, 5, 9]
    print(mergeSort(a))

今天又是摸鱼失败的一天

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值