python基础算法题:二分查找

1、题目:已知正序排列数组,寻找某一位数字所在的位置

2、解题思路

  • 数组至少有一个元素,否则无需循环,while right>=left
  • 三种场景
    • 中间值=目标值,直接返回middle
    • 中间值
    • 中间值>目标值,目标值在左二分之一,right=middle+1

3、代码实现

def middle_search(data,val):
    left = 0
    right = len(data)-1
    while right >= left:
        middle = (left+right)//2
        if data[middle] == val:
            return middle
        elif data[middle] > val:
            right = middle-1
        elif data[middle] < val:
            left = middle+1

4、时间复杂度:O(logn)

5、测试用例设计

data=[1,2,3,4,5,6,7]
data1 = []
data2 = [2]
result = middle_search(data,4)
result1 = middle_search(data,2)
result2 = middle_search(data,6)
result3 = middle_search(data1,2)
result4 = middle_search(data2,2)
print('中间值=目标值:',result)
print('中间值>目标值:',result1)
print('中间值<目标值:',result2)
print('无元素:',result3)
print('仅有一个元素:',result4)

测试用例结果

中间值=目标值: 3
中间值>目标值: 1
中间值<目标值: 5
无元素: None
仅有一个元素: 0

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

嫣然一笑lmz

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

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

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

打赏作者

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

抵扣说明:

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

余额充值