在 Python 中实现二分查找(Binary Search)算法

本文详细介绍了二分查找算法的工作原理,包括其在有序数据上的应用、递归和迭代两种实现方式,并提供了Python代码示例。
摘要由CSDN通过智能技术生成

二分查找(Binary Search)算法,也叫折半查找算法。二分查找的思想非常简单,基于分治算法。二分查找针对的是一个有序的数据集合,每次都通过跟区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间被缩小为 0。

  • 二分查找法是最快的搜索算法。
  • 二分查找法的思想是分而治之。
  • 二分查找法中,列表的元素必须按顺序排列。
  • 二分查找法首先将列表的中间元素与搜索值进行比较。如果搜索值与中间元素匹配,则返回其在列表中的位置。如果搜索值小于中间元素,则下一次搜索将在列表的前半部分继续(升序排序)。如果搜索值大于中间元素,则下一次搜索将在列表的后半部分继续。
  • 每次比较后,待查找的区间缩小为之前的一半

方法1:

lst = [1, 2, 3, 4, 5, 6, 7, 8, 9]
x = int(input("请输入查找的数字:"))

left, right = 0, len(lst) - 1
while left <= right:
    mid = (left + right) // 2
    if lst[mid] == x:
        print(f"{x}在列表的索引位置是:{mid}。")
        break
    elif lst[mid] < x:
        left = mid + 1
    else:
        right = mid - 1
else:
    print(f"列表中没有找到{x}")

方法2:迭代法

def binary_search(arr, target):
    left, right = 0, len(arr) - 1
    while left <= right:
        mid = (left + right) // 2
        if arr[mid] == target:
            return mid
        elif arr[mid] < target:
            left = mid + 1
        else:
            right = mid - 1
    return -1
lst = [1, 2, 3, 4, 5, 6, 7, 8, 9]
x = int(input("请输入查找的数字:"))
index = binary_search(lst, x)
if index != -1:
    print(f"{x}在列表的索引位置是:{index}。")
else:
    print(f"列表中没有找到{x}")

方法3:递归法

def binary_search(array, x, low, high):
    if high >= low:
        mid = low + (high - low)//2
        if array[mid] == x:
            return mid
        elif array[mid] > x:
            return binary_search(array, x, low, mid-1)
        else:
            return binary_search(array, x, mid + 1, high)
    else:
        return -1
lst = [1, 2, 3, 4, 5, 6, 7, 8, 9]
x = int(input("请输入查找的数字:"))
index = binary_search(lst, x, 0, len(lst)-1)
if index != -1:
    print(f"{x}在列表的索引位置是:{index}。")
else:
    print(f"列表中没有找到{x}")

文章创作不易,如果您喜欢这篇文章,请关注、点赞并分享给朋友。如有意见和建议,请在评论中反馈。

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值