news 2026/5/11 22:48:26

二分搜索算方

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
二分搜索算方

二分搜索是一种在排序或单调搜索空间上运行的搜索算法,通过反复将其分割成两半,以在对数时间O(log N)内找到目标值或最优答案。

在数据结构中应用二分搜索算法的条件
应用二分搜索算法:

数据结构必须被排序。
访问数据结构的任何元素应耗时为常数。
二叉搜索算法
以下是二分搜索的逐步算法:

通过找到中间的索引“mid”,将搜索空间分成两半。
比较搜索空间的中间元素与键。
如果 密钥位于中间元素,则进程终止。
如果中间元素找不到关键,选择下一个搜索空间的一半。
-> 如果键比中间元素小,则下一次搜索使用左侧。
-> 如果键大于中间元素,则下一次搜索使用右侧。
该过程持续进行,直到找到关键密钥或整个搜索空间耗尽。
二分搜索算法是如何工作的?
为了理解二分搜索的工作原理,请考虑以下示例:

考虑数组 arr[] = {2, 5, 8, 12, 16, 23, 38, 56, 72, 91},目标 = 23。


如何实现二分搜索?
二叉搜索算法可以通过以下两种方式实现

迭代二分搜索算法
递归二分搜索算法
迭代算法:时间 O(log n) 和空间 O(1)
这里我们使用while循环继续比较密钥并将搜索空间分成两半的过程。

重定向图标

class GFG { static int binarySearch(int arr[], int x) { int low = 0, high = arr.length - 1; while (low <= high) { int mid = low + (high - low) / 2; // Check if x is present at mid if (arr[mid] == x) return mid; // If x greater, ignore left half if (arr[mid] < x) low = mid + 1; // If x is smaller, ignore right half else high = mid - 1; } // If we reach here, then element was // not present return -1; } public static void main(String args[]) { int arr[] = { 2, 3, 4, 10, 40 }; int x = 10; int result = binarySearch(arr, x); if (result == -1) System.out.println( "Element is not present in array"); else System.out.println("Element is present at " + "index " + result); } }

输出
Element is present at index 3
递归算法:时间 O(log n) 和空间 O(log n)
创建一个递归函数,并将搜索空间的中间值与键进行比较。根据结果,要么返回找到密钥的索引,要么调用下一个搜索空间的递归函数。

class GFG { // A recursive binary search function. It returns // location of x in given array arr[low..high] is present, // otherwise -1 static int binarySearch(int arr[], int low, int high, int x) { if (high >= low) { int mid = low + (high - low) / 2; // If the element is present at the // middle itself if (arr[mid] == x) return mid; // If element is smaller than mid, then // it can only be present in left subarray if (arr[mid] > x) return binarySearch(arr, low, mid - 1, x); // Else the element can only be present // in right subarray return binarySearch(arr, mid + 1, high, x); } // We reach here when element is not present // in array return -1; } public static void main(String args[]) { int arr[] = { 2, 3, 4, 10, 40 }; int n = arr.length; int x = 10; int result = binarySearch(arr, 0, n - 1, x); if (result == -1) System.out.println( "Element is not present in array"); else System.out.println( "Element is present at index " + result); } }

输出
Element is present at index 3
复杂性分析
时间复杂度:
-> 最佳情况:O(1)
-> 平均情况:O(对数n)
->最坏情况:O(log n)
辅助空间:O(1),如果考虑递归调用栈,则辅助空间为 O(log N)。

编程资源 https://pan.quark.cn/s/7f7c83756948 更多资源 https://pan.quark.cn/s/bda57957c548
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/7 5:34:28

TensorFlow SavedModel 深度解析:超越 `model.save()` 的模型部署艺术

TensorFlow SavedModel 深度解析&#xff1a;超越 model.save() 的模型部署艺术 引言&#xff1a;为什么 SavedModel 比你想象的更重要 在 TensorFlow 生态系统中&#xff0c;模型保存似乎是一个被简化为 model.save(my_model) 的简单操作。然而&#xff0c;这种表面上的简单…

作者头像 李华
网站建设 2026/5/11 17:40:42

基于Java的广播电视设备巡检智慧管理系统的设计与实现全方位解析:附毕设论文+源代码

1. 为什么这个毕设项目值得你 pick ? 广播电视设备巡检智慧管理系统通过集成会员管理、设备参数与故障管理等关键模块&#xff0c;实现从数据录入到维修报告生成的全流程自动化。相较于传统系统&#xff0c;该方案采用SpringMVC框架和MySQL数据库构建更高效的数据处理流程&am…

作者头像 李华
网站建设 2026/5/11 6:09:51

毕业论文开题报告-基于单片机的老鼠诱捕装置设计与实现

目录基于单片机的老鼠诱捕装置设计与实现的介绍背景与意义系统总体设计硬件设计要点软件设计流程创新点与难点预期成果项目技术支持可定制开发之功能亮点源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作基于单片机的老鼠诱捕装置设计与实现的…

作者头像 李华
网站建设 2026/5/9 16:38:42

C语言对话-15.Back to Base-ics

lostmouse翻译和往常一样&#xff0c;我又在为一个按说应该很简单的设计问题大伤脑筋。可能是劳工节假期刚过还没来得及收心吧&#xff0c;我感觉自己有点迷迷糊糊的。Wendy刚开始休产假&#xff0c;我的靠山也没了。 其实任务只不过是要在一个工程中引入一个新类而已。我已经有…

作者头像 李华