1.while循环实现
li = [1,4,6,8,9,10,15,18]
left = 0
right = len(li)-1
n = 99
while 1:
if left<right:
mid = (left+right)//2
if n>li[mid]:
left = mid + 1
if n <li[mid]:
right = mid-1
if n==li[mid]:
print("找到了")
break
else:
print("找不到")
break
2.递归实现
li = [1,4,6,8,9,10,15,18]
def func(n,left,right):
if left<=right:
mid = (left+right)//2
if n<li[mid]:
right = mid-1
return func(n,left,right) # 但你用了递归后要返回一个值,前面的所有都要返回,不然是返回不到的
if n>li[mid]:
left = mid + 1
return func(n,left,right)
if n==li[mid]:
print("找到了")
return mid # 返回索引
else:
print("找不到")
return -1
a =func(4,0,len(li)-1)
print(a)
3.另类方法实现,缺点(无法准确计算出第n个数原列表的索引)
lst = [1,2,5,7,9,25,35,43,47,49,55,58,61]
def func(lst,taget):
left = 0
right = len(lst)-1
if left>right:
print("找不到")
else:
mid = (left+right)//2
if taget>lst[mid]:
return func(lst[mid+1:],taget)
elif taget<lst[mid]:
return func(lst[:mid],taget)
else:
print("找到了")
return
func(lst,56)