二分查找
Posted jonnyjiang-zh
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二分查找相关的知识,希望对你有一定的参考价值。
二分查找
二分查找是一种算法,它的输入是一个有序列表。如果所要查找的元素在其中就返回其位置,否则就返回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
以上是关于二分查找的主要内容,如果未能解决你的问题,请参考以下文章