当前位置: 首页 > news >正文

二分搜索算方

二分搜索是一种在排序或单调搜索空间上运行的搜索算法,通过反复将其分割成两半,以在对数时间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
http://www.jsqmd.com/news/325099/

相关文章:

  • 计算机毕设Java基于Web的应急救援医疗器材管理平台的设计与实现 基于Java Web的应急医疗设备管理系统的设计与开发 Java Web环境下应急救援医疗器械管理平台的构建与实现
  • 2026年浙江靠谱的充电桩生产商排名,充电桩来样定制超良心
  • 2026年比较好的动漫IP授权/日漫IP授权综合竞争力排行榜
  • 聊聊西安直流送风风机正规供应商排名,前十名有哪些
  • 计算机毕设java高校多媒体教室管理系统 Java技术驱动的高校多媒体教室智能管理系统开发 基于Java的高校多媒体教室综合管理平台设计与实现
  • 充电桩智能厂家哪家好,对比评测为你揭晓答案
  • 2026年国内做费用管理系统的公司有哪些
  • TensorFlow SavedModel 深度解析:超越 `model.save()` 的模型部署艺术
  • 2026年哪些公司的费用管理系统好用
  • 发票生成操作流程详解与测试要点
  • 2026年评价高的智能运维智算中心展/智算中心观展预约
  • 2026年专业短视频运营最新营销用户好评榜
  • 吐血推荐继续教育AI论文网站TOP10:写论文不再难
  • 退货流程手动验证操作指南面向软件测试从业者的核心场景与策略
  • 2026年长沙广告公司推荐:本地化场景深度评测,解决获客成本与效果对赌核心痛点
  • AI写论文大推荐!4款AI论文生成工具,开启高效期刊论文写作之旅!
  • 2026年性价比高的费用管理系统公司推荐
  • 2026年烟台广告公司推荐:本地生活引流实战评测,解决实体店获客难与成本痛点
  • 大数据毕设本科生方向100例
  • 2025年目前评价高的地铁广告设计排行榜,候车亭广告/地铁广告/地铁站广告/应援广告/明星应援广告,地铁广告定制排行榜
  • 2026年烟台广告公司推荐:多场景营销痛点深度评价,附本地服务商综合实力排名
  • 2026年靠谱的服务器电源/服务器机箱热门厂家推荐榜单
  • 2026年提供费用管理系统的公司有哪些
  • 2026年评价高的KNX智能家居解决方案/KNX智能家居系统厂家最新热销排行
  • 2026年西安广告公司推荐:企业增长痛点深度评价,覆盖品牌建设与效果转化多元场景
  • 2026年原子灰产品性价比排名,无锡靠谱原子灰制造厂大盘点
  • 2026年烟台广告公司推荐:本地企业增长痛点深度评测,涵盖电商与品牌场景排名
  • 2026年长沙广告公司专项测评及排名报告:权威选型指引
  • 2026年靠谱的高性价比全屋定制五金/新中式全屋定制五金厂家推荐及选购参考榜
  • [python] python-docx-template实用案例解析