zoukankan      html  css  js  c++  java
  • python 二分查找的几种方式

     ⼆分查找. 每次能够排除掉一半的数据.  查找的效率非常高. 但是局限性比较大. 必须是有序列才可以使用二分查找     

    要求: 查找的序列必须是有序序列. 

    几种方法:

    1.

    # 纯算法
    lst = [11, 22, 33, 44, 55, 66, 77, 88, 99, 123, 234, 345, 456, 567, 678, 789]
    n = 567
    left = 0
    right = len(lst)-1
    count = 1
    while left <= right :
        middle = (left +right)  // 2
        if n > lst[middle] :
            left = middle + 1
        elif n < lst[middle] :
            right = middle -1
        else :
            print(count)
            print("存在")
            print(middle)
            break
        count += 1
    else :
        print("不存在")

    2.

    #递归法
    # lst = [11, 22, 33, 44, 55, 66, 77, 88, 99, 123, 234, 345, 456, 567, 678, 789]
    def  binary_search(n,left,right):
        if left <= right :
            middle = (left+right) // 2
            if  n  <lst[middle] :
                right = middle -1
            elif n >lst[middle]:
                left = middle  + 1
            else :
                return middle
            return binary_search(n,left,right)  # 不加return返回永远是None
        else :
            return -1  #没有找到
    
    
    print(binary_search(567,0,len(lst)-1)

    3.

    #l另类方法
    def biinary_search(ls,target):
        left = 0
        right = len(ls) - 1
         if left > right:
            print("不不在这⾥里里")
        middle = (left + right) // 2
        if target < ls[middle]:
            return binary_search(ls[:middle], target)
        elif target > ls[middle]:
            return binary_search(ls[middle+1:], target)
        else:
            print("在这⾥里里")
    binary_search(lst, 567)
            
  • 相关阅读:
    Clouds
    docs
    虚拟化监控问题
    Openstack Ceilometer监控项扩展
    openStack ceilometer API
    sql分级汇总
    【Android归纳】阿里笔试题之Android网络优化
    享元模式
    【Hibernate步步为营】--核心对象+持久对象全析(三)
    Linux经常使用命令(三)
  • 原文地址:https://www.cnblogs.com/beihan/p/9355761.html
Copyright © 2011-2022 走看看