首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

二分搜索递归python

二分搜索(Binary Search)是一种在有序数组中查找特定元素的搜索算法。它通过将目标值与数组的中间元素进行比较,从而将搜索范围缩小一半,直到找到目标值或搜索范围为空为止。

二分搜索的步骤如下:

  1. 确定搜索范围的起始点和终点,通常为数组的第一个元素和最后一个元素。
  2. 计算搜索范围的中间位置,可以使用 (start + end) // 2 来计算。
  3. 将目标值与中间位置的元素进行比较:
    • 如果目标值等于中间位置的元素,则找到目标值,返回索引。
    • 如果目标值小于中间位置的元素,则目标值可能在左半部分,更新搜索范围的终点为中间位置减一。
    • 如果目标值大于中间位置的元素,则目标值可能在右半部分,更新搜索范围的起始点为中间位置加一。
  • 重复步骤 2 和步骤 3,直到找到目标值或搜索范围为空。

二分搜索的时间复杂度为 O(log n),其中 n 是数组的长度。它比线性搜索更高效,特别适用于大型有序数组的查找。

在 Python 中,可以使用递归或迭代的方式实现二分搜索。下面是一个使用递归实现的示例代码:

代码语言:txt
复制
def binary_search_recursive(arr, target, start, end):
    if start > end:
        return -1  # 目标值不存在于数组中
    
    mid = (start + end) // 2
    
    if arr[mid] == target:
        return mid  # 找到目标值,返回索引
    elif arr[mid] > target:
        return binary_search_recursive(arr, target, start, mid - 1)  # 目标值可能在左半部分
    else:
        return binary_search_recursive(arr, target, mid + 1, end)  # 目标值可能在右半部分

# 示例用法
arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]
target = 6
result = binary_search_recursive(arr, target, 0, len(arr) - 1)
if result != -1:
    print("目标值在索引", result, "处")
else:
    print("目标值不存在于数组中")

在云计算领域,二分搜索算法可以应用于各种场景,例如在大规模数据集中查找特定元素、路由算法中的查找等。

腾讯云提供了多种与二分搜索相关的产品和服务,例如云数据库 TencentDB、云服务器 CVM、云存储 COS 等。您可以通过访问腾讯云官方网站(https://cloud.tencent.com/)了解更多关于这些产品的详细信息。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Python递归函数,二分查找算法

目录 一、初始递归 二、递归示例讲解 二分查找算法 一、初始递归 递归函数:在一个函数里在调用这个函数本身。 递归的最大深度:998 正如你们刚刚看到的,递归函数如果不受到外力的阻止会一直执行下去。...但是我们之前已经说过关于函数调用的问题,每一次函数调用都会产生一个属于它自己的名称空间,如果一直调用下去,就会造成名称空间占用太多内存的问题,于是python为了杜绝此类现象,强制的将递归层数控制在了997...,刚刚我们将python允许的递归深度设置为了10w,至于实际可以达到的深度就取决于计算机的性能了。...我们之所以用index方法可以找到,是因为python帮我们实现了查找方法。如果,index方法不给你用了。。。你还能找到这个66么?...这就是二分查找算法! 那么落实到代码上我们应该怎么实现呢?

77530
  • python算法教程》Day8 - 构建二分搜索二分搜索树介绍二分搜索树创建代码

    今天是《python算法教程》的第8篇读书笔记,笔记的主要内容是构建二分搜索树。 二分搜索树介绍 若要对一组有序值中执行操作(如查找),二分搜索法是一个优秀的选择,因为其时间复杂度仅为对数级。...因此,这里引入二分搜索树这一既能利于二分搜索又能以对数级的时间完成搜索的数据结构。 二分搜索树创建代码 二分搜索树是一个对象,其提供插入、搜索节点和判断是否存在某个节点的方法。...#构建二分搜索树 #二分搜索树的节点的自定义类 class Node: lft=None rgt=None def __init__(self,key,val):...insert(node.lft,key.val) else: insert(node.rgt,key,val) return node #从指定节点开始搜索节点...key<node.key: return search(node.lft,key) else: return search(node.rgt,key) #定义二分搜索树类

    766130

    Python实现二分搜索

    这种每次将搜索范围缩小一半的方法,就是二分搜索的思想。本文使用 Python 来实现二分搜索。 一、Python 二分搜索递归实现 在实现代码前,先分析二分法的前提条件: 1....每次递归搜索,数据列表的长度都会缩小“一半”,当找到目标数据或数据列表的长度为0时,递归结束。...True 搜索结果:False 二、Python 二分搜索递归实现 二分搜索也可以使用非递归的方法实现,还是以在 [50, 77, 55, 29, 10, 30, 66, 18, 80, 51]...(array, 777)) 运行结果: 搜索结果:True 搜索结果:False 三、二分搜索与二叉搜索树的关系 关于Python实现二叉搜索树,可以参考:Python实现二叉搜索树 如果将上面的数据...每一次递归,都会将范围缩小到左子树或右子树,直到找到目标数据。这种搜索方式与二分搜索的思路非常相似。

    1.5K20

    穿越搜索迷雾!Python算法解密:线性搜索二分搜索,助你驾驭搜索之道!

    穿越搜索迷雾!Python算法解密:线性搜索二分搜索,助你驾驭搜索之道! 线性搜索 线性搜索是一种简单的搜索算法,逐个检查列表中的每个元素,直到找到目标元素或遍历完整个列表。...示例 下面是用Python编写的线性搜索算法示例: def linear_search(arr, target): for i in range(len(arr)): if arr...二分搜索 二分搜索是一种高效的搜索算法,用于在有序列表中查找特定元素的位置。与线性搜索相比,它通过反复将查找范围减半来快速缩小搜索范围。 算法步骤: 确定查找范围的起始点和终点。...示例 下面是用Python编写的二分搜索算法示例: def binary_search(arr, target): low = 0 high = len(arr) - 1 while...可视化 现在让我们通过可视化展示线性搜索二分搜索算法的执行过程,以加深对算法的理解。

    17130

    如何利用Python实现二分查找(迭代和递归

    二分查找 Binary Search 算法思想:二分查找用于在一个含有n个元素的有序序列中有效地定位目标值。...,值为2的元素出现在索引1的位置(索引从0开始) print(binary_search_iterative(nums, 10)) # Output: None,表示空,没有找到指定的元素 递归定义...迭代和递归实现之间的选择通常是性能考虑,便利性以及个人喜好的最终结果。...总结 本文中介绍了首先二分查找的基本思想,然后用迭代和递归两种方法实现了简易版的二分查找,其实Python实现了功能更强大的二分查找的库 bisect,感兴趣的同学,可以在本文的基础上进行学习。...最后:二分查找的时间复杂度:O(log(n)) 推荐阅读: How to Do a Binary Search in Python

    1.9K31

    二分搜索技术

    int recursionBS(int s[],int x,int low,int high){ //二分查找递归算法 //low指向搜索区间的第一个元素,high指向搜索区间的最后一个元素...二分查找的非递归算法和递归算法查找的方法是一样的,时间复杂度相同,均为O(logn)。...(2)空间复杂度 二分查找的非递归算法中,变量占用了一些辅助空间,这些辅助空间都是常数阶的,因此空间复杂度为O(1)。 二分查找的递归算法,除了使用一些变量外,递归调用还需要使用栈来实现。...递归算法使用的栈空间为递归树的深度,因此二分查找递归算法的空间复杂度为O(logn)。 二分搜索需要注意的几个问题: (1)必须满足有序性。 (2)搜索范围。...二分搜索分为整数上的二分搜索和实数上的二分搜索,大致模板如下。 1. 整数上的二分搜索 整数上的二分搜索,因为缩小搜索范围时,有可能r=mid-1或l=mid+1,因此可以用ans记录可行解。

    28130

    算法:二分搜索

    什么是二分搜索二分搜索(Binary Search)是一种在有序数组中查找特定元素的搜索算法。它每次都能将搜索区间减半,因此效率非常高。 2....二分搜索的工作原理 2.1 确定中间元素 首先,找到数组的中间元素。 2.2 比较中间元素 将中间元素与目标元素进行比较。 2.3 调整搜索区间 如果目标元素等于中间元素,搜索成功。...二分搜索的性能 时间复杂度:O(log n),其中n是数组的长度。 空间复杂度:O(1)。 5. 二分搜索的应用场景 在有序集合中快速查找元素。 可用于一些数学问题的求解,如求平方根等。 6....注意事项 二分搜索要求输入数组是有序的。 在处理重复元素时,可能需要特殊处理来定位目标元素的确切位置。 总结 二分搜索是一种非常高效且实用的算法,特别适用于在大型有序集合中查找元素。...通过简单的逻辑和迭代,二分搜索将复杂的搜索问题化简为了一系列的可管理的步骤,成为了编程中的经典算法。

    20230

    Python 算法基础篇之线性搜索算法:顺序搜索二分搜索

    Python 算法基础篇之线性搜索算法:顺序搜索二分搜索 引用 在算法和数据结构中,搜索是一种常见的操作,用于查找特定元素在数据集合中的位置。...二分搜索算法 二分搜索算法,也称为折半搜索算法,是一种高效的搜索方法,前提是数据集合必须是有序的。...这意味着二分搜索的时间随着数据集合的增大而以对数速 率增加。 3. 顺序搜索二分搜索的对比 顺序搜索二分搜索是两种不同的搜索算法,在不同的场景下有不同的适用性。...二分搜索的时间复杂度为 O ( log n ),其中 n 是列表的长度。二分搜索通过不断将搜索范围缩小为原来的一半,因此时间复杂度较低。...通过二分搜索,我们迅速找到了目标整数’ 11 '在列表中的索引位置。 总结 本篇博客介绍了线性搜索算法的两种实现方式:顺序搜索二分搜索

    35500

    python3--递归函数,二分查找算法的实现

    普通程序员理解函数,高级程序员理解递归(差距很明显~~) 递归函数,在一个函数里执行调用这个函数本身,递归的最大深度998 举例: # 这是一个死循环程序,函数执行打印666,执行完毕,释放内存,...递归,执行一次开辟一个空间,python对内存有个保护机制,默认只能递归到998层 可以更改递归深度 例 import sys sys.setrecursionlimit(10000) def func1...        break     count += 1 执行结果 17 如果列表很大,上面那两种方法查找就会慢很多,它的执行顺序是从前往后,如果要找的数在最后面,就需要把列表全部遍历一遍 第三种:二分查找...(每次从中间取值,比较大小,如果要找的数字比中间值大(如果比中间值小,就取前面那一半),就直接找中间值后面的那一半,继续对半切片查找,在比较,直到找到为止) 二分查找条件(有序且唯一的数字数列) 错误方法示例... [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88] def two_search(li,aim): #二分查找

    82520

    二分搜索树详解

    二分搜索树添加元素的非递归写法,和链表很像,只不过链表中不需要与节点进行比较,而树则需要比较后决定是添加到左子树还是右子树。..., e); } /** * 向以node为根的二分搜索树中插入元素e,精简后的递归实现 * * @param node * @param e * @return 返回插入新节点后二分搜索树的根节点...这样选择合适的终止条件后,多递归了一层但减少很多不必要的代码 * * * 二分搜索树的查询操作 有了前面的基础后,通过递归实现二分搜索树的查询操作就很简单了,只需要比较元素的大小,不断地递归就能找到指定的元素...(C++) * * * 二分搜索树前序遍历的非递归实现 虽然使用递归实现对树的遍历会比较简单,但通常在实际开发中并不会太多的去使用递归,一是怕数据量大时递归深度太深导致栈溢出,二是为了减少递归函数调用的开销...{ root = remove(root, e); } /** * 删除以node为根的二分搜索树中值为e的节点,递归实现 * 返回删除节点后新的二分搜索树的根 */ private Node

    40620

    关于二分查找和二分搜索

    首先是二分查找,举个有序的整数数组例子(二分查找和搜索都是针对有序数组) public int rank(int key, int n) { int lo = 0, hi = n -...假如lo=5,我查找一遍,就知道他前面有5个元素,即我这次要插入的元素下标就为5(从0开始计算) 下面讲一下二分搜索 比如从有序数组中查找某个数值 lower_bound 给定长度为n的单调不下降数列...an-1<109    0≤k≤109    输入    n = 5    a = {2, 3, 3, 5, 6}    k = 3   输出     1(其中a0=3)   这里不仅仅是二分查找了...} 比如a[5]={2, 3, 3, 5, 6} a[2]=3和3进行比较,可以知道解不大于2 a[1]=3和3比较,可以知道解不大于1 a[0]=2和3比较,可以知道解不小于0 所以解为1 二分搜索法是通过不断缩小解的可能存在的范围

    18320

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券