用python写一个归并排序

def mergesort(nums):  #利用python写一个归并排序方式(这里采用递归的思想)
    if len(nums) == 1:   #递归的基本结束条件  当输入的列表的长度为一时,则直接返回
        return nums
    gap = len(nums) // 2  #gap表示一个列表的中间值
    left = mergesort(nums[0:gap])  #把一个列表拆分成两个部分left和right
    right = mergesort(nums[gap:])  
    return merge(left, right)  #把刚才拆分好的列表放入merge函数中进行合并


def merge(left, right):
    l, r = 0, 0   #定义两个指针
    arry = []   
    while l < len(left) and r < len(right):#循环条件是当l的值小于left的长度时循环,right同理
        if left[l] < right[r]:  #如果左边的数小于右边的数则放入列表arry中,否则右边放入arry中
            arry.append(left[l])
            l += 1
        else:
            arry.append(right[r])
            r += 1
    arry += left[l:]  #将left或right列表剩余的数字和列表arry进行合并
    arry += right[r:]
    return arry #返回排好序的列表


result2 = mergesort([5, 9, 6, 3, 2, 5, 8, 4, 1, 0])
print(result2)

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值