二分法可以在有序排列中,通过不断对半切割数据,提高数据查找效率。
lst = [1,4,6,7,45,66,345,767,788,999]
n = 66
left = 0
right = len(lst)-1
while left < right: #边界,当右边比左边还小的时候退出循环
mid = (left + right)//2 #必须是整数,索引没有小数
if lst[mid] > n:
right = mid - 1
if lst[mid] < n:
left = mid +1
if lst[mid] == n:
print("找到这个数")
break
else:
print("没有这个数")
递归二分法
lst = [11, 23, 45, 67, 99]
def func(n,left,right):
if left <= right:
mid = (left +right)//2
if n > lst[mid]:
left = mid +1
func(n,left,right) #递归 递归入口
if n < lst[mid]:
right = mid -1
func(n,left,right)
if n == lst[mid]:
print("找到了这个数")
else:
print("没有这个数") #递归的出口