二分查找针对的是一个有序的数据集合,查找思想有点类似分治思想。每次都通过跟区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间被缩小为0。
时间复杂度O(logn)
需要是有序且数组存储
图解
代码
import math
def Binary_search(arr,value):
right=len(arr)-1
left=0
if right>1:
while left<=right:
mid=math.floor((left+right)/2)
if value<arr[mid]:
right=mid-1
elif value>arr[mid]:
left=mid+1
else:
return mid
else:
return -1
array=[1,2,3,4,5,6,7]
value=3
result=Binary_search(array,value)
if result != -1:
print (result) #输出要查找的值的索引
else:
print("数组中没有元素")
输出:
2
注意在测试时使用的array一定要是有序的,否则白费功夫…