• 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)

     

     

  • 相关阅读:
    Redis
    cut
    grep
    MySQL中EXPLAIN的解释
    MySQL数据类型
    有用的MySQL语句
    mysql函数
    memcache
    存储过程 游标的使用
    存储过程批量删除
  • 原文地址:https://www.cnblogs.com/zhuifeng-mayi/p/9216694.html
Copyright © 2020-2023  润新知