算法图解笔记1.2 二分查找

算法图解笔记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的位置。
应用
二分法的关键是,将一个未知的变量变为已知,然后在用已知的变量来衡量未知的变量是否可行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值