码迷,mamicode.com
首页 > 其他好文 > 详细

二分查找

时间:2020-07-07 13:27:08      阅读:55      评论:0      收藏:0      [点我收藏+]

标签:有序列表   答案   one   列表   玩法   pre   有序   就会   code   

二分查找

二分查找是一种算法,它的输入是一个有序列表。如果所要查找的元素在其中就返回其位置,否则就返回None。

二分查找在生活中最常见的例子就是猜数游戏,游戏的玩法呢就是支持人给出一个数的范围,心里确定一个数,让其他人来猜。每次当有人猜错时,主持人便会告诉我们猜大了还是猜小了,相应的我们的猜数范围也跟着缩小,直至猜中那个数。

一般来说的猜数方式常见的就是挨个挨个问,比如说主持人给的数字范围是0——10,你呢第一次猜4,主持人说小了,然后你就会猜5、6...直到猜到10 。其中一共猜了7次,当然,这只是一种假设。另一种切实可行的方法呢就是,你第一个数猜(0 + 10 )// 2 == 5,主持人说小了,然后你就猜(6 + 10)// 2 == 8,主持人又说小了,然后你接着(8 + 10)// == 9,主持人还说小了,但是,你已经知道了答案,那就是10,这个方式猜了3次。这呢,就是二分查找,每次查找范围减少一半,用的时间也相应的减少。

# binary search


def binary_search(l, item):     # l是给的猜数范围,item是猜的数
    low_index = 0       # 起始位置
    high_index = len(l) - 1  # 结尾的位置
    while low_index <= high_index:      # 当猜的数不在列表中时,可以验证
        mid = (low_index + high_index) // 2  # 中间数
        if l[mid] == item:      # 如果找到则返回下标
            return mid
        if l[mid] < item:       # 若中间的那个数比猜的数小/大,那么猜数的的范围相应的变化
            low_index = mid + 1
        else:
            high_index = mid - 1
    return None


def main():
    l = list(range(5))
    print(binary_search(l, 2))
    print(binary_search(l,-1))


if __name__ == ‘__main__‘:
    main()


输出结果:

2
None

二分查找

标签:有序列表   答案   one   列表   玩法   pre   有序   就会   code   

原文地址:https://www.cnblogs.com/JonnyJiang-zh/p/13259970.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!