Python:二分查找

Python:二分查找

前提条件

    存储数据的列表或元组中的数据是排好序了的。

实现

  1. 设置两个变量,start和end表示开始坐标和末尾坐标,用来计算数组的中间坐标的值;
  2. 当中间值和需要查找的值相等的时候,即查找完成;
  3. 当需要查找的值大于中间值的时候,就将start赋值为中间坐标值,然后再次计算中间坐标值,进行比较,这样就实现了“二分”和“查找”;
  4. 当需要查找的值小于中间值的时候,就将end赋值为中间坐标值,然后再次计算中间坐标值,进行比较,这样就实现了“二分”和“查找”。

细节重点

    计算中间值时一般是:(start+end)//2,但是这样处理的时候需要注意一个容易忽略的点:

Python中整除运算是向下圆整的

所以当我们的 start=0 和 end=(列表长度-1) 时,我们列表中的最后一个元素无论怎样都是不会被遍历到的(好好想一下中值的运算和整除向下圆整的规则)


解决方法:
    将end设置为列表的长度。即人为多设一个位置给列表的最后一个元素去当“替死鬼”。


代码示例

x = [1, 2, 4, 5, 6, 7, 8, 9, 11, 12, 13, 15, 16]
length = len(x)
num = int(input('请输要查找的数:'))


def erFeng(number, start, end):
    middle = (start + end) // 2
    if x[middle] == number:
        print(middle)
    else:
        if x[middle] > number:
            erFeng(number, start, middle)
        elif x[middle] < number:
            erFeng(number, middle, end)


erFeng(num, 0, length)

这里只体现出了问题,更多细节请自己完善。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

BUG_GUB

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

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

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

打赏作者

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

抵扣说明:

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

余额充值