二分查找基本原理

二分查找是一种在有序列表中查找元素的高效算法,其基本思想是每次比较中间元素,根据比较结果缩小搜索范围。大O记法表示其时间复杂度为O(log_2N)。文章提供了两种Python代码实现方式,分别处理了中间索引的取整情况。
摘要由CSDN通过智能技术生成

1.二分查找

1.1 基本概念

  • 二分法(折半查找)是一个查找算法
  • 要求:数据必须是有序列表
  • 核心思想:掐头结尾取中间

1.2 二分查找查找步骤

1.2.1 中间索引不能整除,取整数作为中间索引

在这里插入图片描述

1.2.2 索引不能整除,整数+1作为中间索引

在这里插入图片描述

1.3 二分查找大O记法表示

元素个数步骤次数
21
42
83
164
N l o g 2 N log_2^{N} log2N
  • 二分查找大O记法表示: l o g 2 N log_2^{N} log2N
    • 意味着该算法当数据量翻倍时,步数加 1。

2. 二分查找代码实现

# 方式一
lis = [1, 12, 14, 15, 23, 35, 435, 567, 578, 656, 789, 1234]
n = int(input('请输入你要查找的数:'))
left = 0
right = len(lis) - 1
while left <= right:
    middle = (left + right) // 2
    print(f"当前中间索引为{middle},值为{lis[middle]}")
    if n > lis[middle]:
        left = middle+1
    elif n < lis[middle]:
        right = middle-1
    else:
        print('找到了,他在索引为%s位置' % middle)
        break
else:
    print('没有这个数据')

# 方式二
lis = [1, 12, 14, 15, 23, 35, 435, 567, 578, 656, 789, 1234]
n = int(input('请输入你要查找的数:'))
left = 0
right = len(lis) - 1
while left <= right:
    middle = (left + right) // 2
    if (left + right) % 2 != 0:
        middle = ((left + right) // 2)+1
    print(f"当前中间索引为{middle},值为{lis[middle]}")
    if n > lis[middle]:
        left = middle+1
    elif n < lis[middle]:
        right = middle-1
    else:
        print('找到了,他在索引为%s位置' % middle)
        break
else:
    print('没有这个数据')

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

荼靡~

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

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

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

打赏作者

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

抵扣说明:

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

余额充值