zoukankan      html  css  js  c++  java
  • 算法 (二分查找算法)

    二分查找

     从有序列表的候选区data[0:n]开始,通过对待查找的值与候选区中间值的比较,可以使候选区减少一半

     
    二分查找:
    在一段数字内,找到中间值,判断要找的值和中间值大小的比较。
    如果中间值大一些,则在中间值的左侧区域继续按照上述方式查找。
    如果中间值小一些,则在中间值的右侧区域继续按照上述方式查 找。
    直到找到我们希望的数字。
     
    l = [1,3,4,5,6,7,44,55,77,88,99]
    def func(line,num):
        low=0#获取最小下标
        high=len(line)-1#获取最大下标
        while low <= high: #只有 最小下标小于最大下标才能证明有数据
            mid=(low+high)//2 #获取中间下标,实现二分
            if line[mid] == num: #如果这个中间数等于你想查找的值
                return mid #返回该下标
            elif  line[mid] > num:#如果该数值大于你想寻找的值
                high=mid-1#将中间下标的左移一位作为最大下标的值,实现搜索范围减半
            else:
                low=mid+1 #同理 最小下标右移
        return "error"
    print(func(l,1))
    
    #输出
    0

    递归函数方式

    l = [1,3,4,5,6,7,44,55,77,88,99]
    
    def find(l,aim,start=0,end=None):
        end=len(l) if end is None else end
        mid_index=(end-start)//2 + start
        if start <= end:
            if l[mid_index] < aim:
                return find(l,aim,start=mid_index+1,end=end)
            elif l[mid_index] > aim:
                return find(l,aim,start=start,end=mid_index-1)
            else:
                return [mid_index]
        else:
            return 'error'
    print(find(l,5))
    #输出
    [3]
  • 相关阅读:
    汉语-词语-从容:百科
    汉语-词语-伶俜:百科
    汉语-词语-心迹:百科
    汉语-词语-痛楚:百科
    汉语-词语-痛苦:百科
    汉语-词语:散步
    汉语-词语-憎恨:百科
    2455 繁忙的都市
    P2820 局域网
    NOIP2013Day1T3 表示只能过一个点
  • 原文地址:https://www.cnblogs.com/mjiu/p/8906303.html
Copyright © 2011-2022 走看看