# 用代码写的计算方式。
# 二分查找是最简单的算法,比较经典的算法。
#1,数字序列,有序,不重复。
l1 = [1, 3, 5, 7, 8, 10, 11]
def binary_search(li,aim,start=0,end=None): # 第一次:[1, 3, 5, 7, 8, 10, 11] aim 6,start 0,end 7
# 第二次:[1, 3, 5, 7, 8, 10, 11] aim 6 start:0,end:3
# 第三次:[1, 3, 5, 7, 8, 10, 11] aim 6 start:2,end:3
# 第四次:[1, 3, 5, 7, 8, 10, 11] aim 6 start:3,end:3
# 第五次:[1, 3, 5, 7, 8, 10, 11] aim 6 start:3,end:3
end = len(li) if end is None else end
mid_index = (end - start) // 2 + start # 第一次 mid 3 第二次:mid 1 第三次:mid:2 第四次:mid:3
if start < end:
if aim > li[mid_index]:
return binary_search(li, aim, start=mid_index+1, end=end) # 第二次:[1, 3, 5, 7, 8, 10, 11] aim 6 start: 2 end:3
# 第三次:[1, 3, 5, 7, 8, 10, 11] aim 6 start: 3 end:3
elif aim < li[mid_index]:
return binary_search(li, aim, start=start, end = mid_index) # 第一次:[1, 3, 5, 7, 8, 10, 11] aim 6 start:0,end:3
# 第四次:[1, 3, 5, 7, 8, 10, 11] aim 6 start:3,end:3
elif aim == li[mid_index]:
return mid_index
else:
return None
# print(binary_search(l1,3))
print(binary_search(l1,12))