# 递归版本
def binary_search(l, item):
length = len(l)
if length == 0:
return False
mid = length//2
if item == l[mid]:
return True
elif item < l[mid]:
return binary_search(l[0:mid], item)
elif item > l[mid]:
return binary_search(l[mid+1:], item)
print(binary_search([1,2,3,4,5,6,7], 7))
# 非递归版本
def binary_search(l, item):
start = 0
end = len(l)-1
while start <= end:
mid = (start + end) // 2
if item == l[mid]:
return True
elif item < l[mid]:
end = mid - 1
else:
start = mid + 1
return False
# 需求:返回找到的第一个数据的下标
def binary_search(l, item):
start = 0
end = len(l)-1
while start <= end:
mid = (start + end) // 2
if item == l[mid]:
if mid == 0 or item == l[mid-1]:
return mid
else:
end = mid - 1
elif item < l[mid]:
end = mid - 1
else:
start = mid + 1
return -1