a = [1,3,4,6,7,8,9,11,15,17,19,21,22,25,29,33,38,69,107]
def binary_search(start,end,n,d_list):
"""
每次把列表规模折半,查找一个数据最多只需要2的n次方 < len(d_list),是2的多少次方,就是最多查多少次。
假如列表长度为200,那最多只需查询8次(2**8次方)
:param start: 查找的起始位置
:param end: 查找的结束位置
:param n: 要查找的值
:param d_list: 要找的列表
:return:
"""
if start < end:
mid = (start + end)//2
if d_list[mid] > n:
print("go left",start,mid,end,"--",d_list[start],d_list[mid],d_list[end-1])
binary_search(start,mid,n,d_list)
elif d_list[mid] < n :
print("go right..",start,mid,end,"--",d_list[start],d_list[mid],d_list[end-1])
binary_search(mid+1,end,n,d_list)
else:
print("find:",d_list[mid],mid)
else:
print("cannot find %s in this data list" % n)
binary_search(0, len(a), 22, a)