NB二人组(二)----归并排序

归并排序的思路:

归并算法程序(配合下图进行思考):

 

def merge(li,low,mid,high):
    i = low
    j = mid + 1
    ltmp=[]
    while i <= mid and j <= high: # 左边有数 且 右边也有数
        if li[i] < li[j]: # 左边小于右边
            ltmp.append(li[i]) # 把左边的数 添加到 ltmp 这个列表中
            i += 1 # 右移一位
        else:
            ltmp.append(li[j]) # 右边小于左边
            j += 1 # 右移
    while i <= mid: # 如果左边有剩余
        ltmp.append(li[i]) # 将剩余的加入ltmp列表
        i += 1 # 右移
    while j <= high: # 如果右边有剩余
        ltmp.append(li[j]) # 将剩余的加入ltmp列表
        j += 1 # 右移
    li[low:high+1] = ltmp # 将ltmp这个列表里的数 传给 li 这个列表

li = [1,4,6,7,9,2,3,5,8]
merge(li,0,4,8)
print(li)

打印出来的效果图为:

有了归并怎么用?

def merge(li,low,mid,high):
    i = low
    j = mid + 1
    ltmp=[]
    while i <= mid and j <= high: # 左边有数 且 右边也有数
        if li[i] < li[j]: # 左边小于右边
            ltmp.append(li[i]) # 把左边的数 添加到 ltmp 这个列表中
            i += 1 # 右移一位
        else:
            ltmp.append(li[j]) # 右边小于左边
            j += 1 # 右移
    while i <= mid: # 如果左边有剩余
        ltmp.append(li[i]) # 将剩余的加入ltmp列表
        i += 1 # 右移
    while j <= high: # 如果右边有剩余
        ltmp.append(li[j]) # 将剩余的加入ltmp列表
        j += 1 # 右移
    li[low:high+1] = ltmp # 将ltmp这个列表里的数 传给 li 这个列表

def mergesort(li,low,high):
    if low < high:
        mid = (low + high) // 2
        mergesort(li,low,mid)   # 先分解
        mergesort(li,mid+1,high)   # 先分解
        merge(li,low,mid,high)   # 在合并

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

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/zhuifeng-mayi/p/9216694.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值