python:浅析二分查找算法

本文详细介绍了二分查找算法的基本概念、特点及其实现过程。二分查找是一种高效的搜索算法,适用于有序且无重复元素的列表,通过不断将查找区间对半分割来快速定位目标元素。文章还分析了算法的优缺点,以及在实际应用中的表现。

python:二分查找

1、什么是二分查找?

​ 所谓二分查找就是在一个有序并且无重复的列表中,对该列表的元素进行查找。假如我的列表是升序排列(即从小到大),那么查找的方式就为:将所有元素对半切开查找,也就是说从中间开始查找。如果中间的这个元素大于目标元素,则往前挨个查找,因为前边的是小的,那如果小于目标元素,则往后挨个查找,因为后边的都是大的。

2、特点

​ (1)必须针对于有序列表

​ (2)该列表必须无重复

​ (3)按下标索引查找

3、算法源码

def find(mylist,targer):
     """
    :param mylist: 有序并且无重复的列表
    :param targer: 目标数字
    :return: 返回找到的元素
    """
    # 先拿出索引,left表示第一个索引,right表示最后一个索引
    left ,right = 0, len(mylist)-1
    # 查找的范围为索引范围内
    while left <= right:
        # 每次都获取中间位置的索引
        index = (left + right) // 2
        # 通过索引获得元素
        result = mylist[index]
        # 如果相等
        if result == targer:
            # 那么将返回这个元素
            return result
       	# 如果所找到的元素小于目标数字
        elif result < targer:
            # 那么从0开始的索引就+1,这里我们不能在最后+1,因为很可能出现索引超出界限的异常
            left += 1
        # 如果所找到的元素大于目标数字,则最后的索引-1。如果从索引为0的开始减的话,那么元素右-1嘛?很明显没有
        else:
            right -= 1
    # 如果到最后查找完,没有在列表中找见,则返回None
    return None

if __name__ == '__main__':
    # 使用列表推导式创建列表
    mylist = [i for i in range(50)]
    # 目标数字
    target = 36
    # 调用函数并返回一个值
    result = find(mylist,target)
    # 输出该值
    print(result)

4、分析图

在这里插入图片描述

5、总结

​ 从理论上讲,二分查找法比顺序查找效率能稍微高出一半,但对于靠前的元素,比如1、2那么它这个效率就没有顺序查找的效率高,并且二分查找有一个缺点,就是每次与目标数字不匹配,那么都要+1,此时就出现了奇偶数的问题。比如偶数字10// 2 = 5,那么就是找到下标索引为5的元素,但是如果是奇数 11 // 2 =5,此时就出现了除不尽的问题,那么也就是说如果遇到奇数它有在循环里白循环了一次,所以循环的次数就多了,这就是二分法的缺点所在。


以上均为自己在学习和实践过程中做出的总结,发现该算法程序与书中的说明不吻合,有很大的出入,所以特地摘出来与大家分享,如果本篇文章有描述不正确的地方,还请给位码友速速指出,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

御弟謌謌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值