zoukankan      html  css  js  c++  java
  • 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)

     

     

  • 相关阅读:
    python面试题总结与分析(一)
    Word2vec ------算法岗面试题
    深度学习(二)-----算法岗面试题
    深度学习(一)-------算法岗面试题
    模型融合和提升的算法------算法面试题
    前后端交互3 发送消息1
    前后端交互2 vuex存储token
    前后端交互1
    4.弹出层组件的实现与封装
    3. 聊天列表页面的实现
  • 原文地址:https://www.cnblogs.com/zhuifeng-mayi/p/9216694.html
Copyright © 2011-2022 走看看