归并排序

def merge_sort(a):
    mid = len(a) // 2
    # 当递归进入到最底层 列表只有一个元素就返回这个列表
    if len(a) == 1:
        return a
    # 递归调用算法  返回左边的列表
    left_list = merge_sort(a[:mid])
    # 递归调用算法  返回右边的列表
    # 以此类推 分别依次分化一个列表成两个
    right_list = merge_sort(a[mid:])
    #创建两个指针
    left, right = 0, 0
    new_list = list()
    left_lenth = len(left_list)
    right_lenth = len(right_list)
    # 当左右指针都小于对应的列表长度就循环,否则退出
    while left < left_lenth and right < right_lenth:
        # 左列表和右列表进行相比,小的就放入new_list,然后对应指针加1
        if left_list[left] <= right_list[right]:
            new_list.append(left_list[left])
            left += 1
        else:
            new_list.append(right_list[right])
            right += 1
    # 当左右两个列表有一个遍历完了, 另一个可能还有遍历完,但是剩下的元素肯定比new_list最后一个元素大
    # 就将之与新list合并,由于不知道哪个列表先遍历完,所以都从指针开始切片,然后添加
    new_list.extend(left_list[left:])
    new_list.extend(right_list[right:])
    return new_list

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值