算法图解笔记1.2 二分查找
1.定义一个二分法函数
```def binary_search(list,item):###定义一个函数,输入值为一个按顺序排列的有序列表,和一个要找的值
low=0#初始左侧范围
high=len(list)-1#初始右侧范围
while low<=high:#循环语句,当范围未缩小到仅剩一个值时,执行循环语句
mid=(high+low)//2#二分法核心,每次猜序列中央的索引值 //为向下取整
guess=list[mid]#猜测值为猜测索引对应的值
if guess==mid:###先判断能不能直接猜对,同时也是循环内部的第一次判断,当满足后直接跳出循环,返回值为mid
return mid
if guess>item:#当猜测值不准,判断偏大还是偏小,若猜测偏大,则猜测值作为下次判断区间的high范围
high=mid-1#此时减一和下面的加一是为了避免死循环出现,详见总结
else:
low=mid+1
return None
2.用例
list_1=[1,3,5,7,9]
print(binary_search(list_1,3))
3.总结
边界的问题
如果guess>item,item最后一次出现的位置一定在guess(即list[mid])之前,更新high=mid-1。
如果guess<item,item最后一次出现的位置在guess之后,更新low=mid+1。
直到 guess==mid时,区间内只有一个元素,位置l就是item的位置。
应用
二分法的关键是,将一个未知的变量变为已知,然后在用已知的变量来衡量未知的变量是否可行