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

    二分查找--非递归算法
    # lst = [22,33,44,55,66,77,88,99,101,238,345,456,567,678,789]
    # n=238
    # left = 0
    # right = len(lst)-1
    # count = 1
    # while left<=right:
    #     middle = (left+right)//2
    #     if n <lst[middle]:
    #         right = middle-1
    #     elif n > lst[middle]:
    #         left = middle+1
    #     else:
    #         print(count)
    #         print(middle)
    #         break
    #     count = count + 1
    # else:
    #     print("不存在")
    普通递归二分法查找
    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)
        else:
            return -1
    print(binary_search(567,0,len(lst)-1))
    #递归 二分法,很难计算位置
    # def binary_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("在这里")
    #递归二分法2
    def
    search(l,aim,start=0,end=None): if end is None:end = len(l)-1 if start<=end: mid = start + (end-start)//2 mid_value = l[mid] if aim > mid_value: start = mid+1 ret = search(l,aim,start,end) return ret elif aim < mid_value: end = mid-1 ret = search(l,aim,start,end) return ret else: return mid else: pass
  • 相关阅读:
    [HAOI2008]硬币购物
    [SCOI2005]骑士精神
    [ZJOI2007]最大半联通子图
    [HAOI2007]反素数
    [SCOI2005]繁忙的都市
    小凯的疑惑
    5月16日vj题解
    周六题目前四题详解
    Codeforces Round #629 (Div. 3)做题记录
    Codeforces Round #570 (Div. 3) B. Equalize Prices
  • 原文地址:https://www.cnblogs.com/pythonz/p/9932340.html
Copyright © 2011-2022 走看看