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

搜索算法:二分查找

二分查找(Binary Search)是一种高效的搜索算法,适用于已排序的数组或列表。通过每次将搜索范围减半,其时间复杂度为O(log n),远优于线性查找的O(n)


快速理解

二分查找(也叫折半查找)的思路特别像我们玩 “猜数字” 游戏:

  • 比如猜 1~100 之间的数字,你先猜 50,对方说 “大了”,那你就知道答案在 1~49 之间;
  • 再猜 25,对方说 “小了”,就知道答案在 26~49 之间;
  • 每次都把查找范围缩小一半,直到找到目标值,或确定目标值不存在。

因此只要你的数据是有序的,二分查找就是最高效的选择。

算法核心思想

  1. 确定搜索范围:初始化左边界left为 0,右边界right为数组长度减 1。
  2. 计算中间索引:取中间位置mid = left + (right - left) // 2(避免整数溢出)。
  3. 比较目标值
    • arr[mid] == target,返回mid
    • arr[mid] < target,缩小范围至右半部分(left = mid + 1)。
    • arr[mid] > target,缩小范围至左半部分(right = mid - 1)。
  4. 终止条件(left <= right):当left > right时,说明目标不存在,返回-1.

代码实现(基础版java)

class Solution { // 准备一个无序数组,先排序(二分查找必须用有序数组!) public int search(int[] nums, int target) { // 1. 初始化左右边界 int left = 0,right = nums.length - 1; // 2. 循环查找 while(left<=right){ // 计算中间索引,避免溢出 int mid = (right + left)/2 ; int num = nums[mid]; if(num == target) { // 找到目标,返回索引 return mid; }else if(target > num){ // 目标在右半区,左边界右移 left = mid + 1; }else { // 目标在左半区,右边界左移 right = mid - 1; } } // 没找到返回-1 return -1; } }

提醒(tips):

  • 必须先排序!二分查找的前提是数组有序。如果数组是乱的,比如[5,2,9],直接用二分查找会得到错误结果。一定要先用Arrays.sort()把数组排好序。

  • mid 的计算方式不要写成mid = (left + right) / 2,当leftright都是很大的数时,会导致整数溢出。正确写法是mid = left + (right - left) / 2

  • 边界更新要加 1 / 减 1不要写成left = midright = mid,这会导致死循环。因为如果arr[mid]不是目标值,这个位置就可以排除,所以要直接跳到mid + 1mid - 1

  • 循环条件是left <= right如果写成left < right,会漏掉最后一个可能的元素。比如当leftright相等时,mid就是这个元素,不判断就会错过

总结(基础版)

应对大多数情况下一下步骤完全可以直接套用:

  • 初始化边界:左指针left=0,右指针right=数组长度-1
  • 循环查找:当left <= right时(有查找空间),计算中间索引mid = left + (right-left)/2(避免整数溢出,替代(left+right)/2);
  • 比较缩范围:
    • arr[mid] == target:找到目标,返回mid
    • arr[mid] < target:目标在右半区,left = mid + 1
    • arr[mid] > target:目标在左半区,right = mid - 1
  • 未找到:循环结束无返回,返回-1表示目标不存在。
http://www.jsqmd.com/news/355388/

相关文章:

  • 2026最新瓷砖胶厂商top5推荐!国内优质瓷砖胶企业权威榜单发布,资质服务双优助力高品质建材应用 - 品牌推荐2026
  • Zed IDE入门实战:保姆级安装使用教程
  • 2026年口碑好的临时用电发电机租赁,工程施工发电机租赁公司采购选型指南 - 品牌鉴赏师
  • ‌日本大雪灾害模拟:第三方API超时韧性测试实战
  • 谁懂啊!这些专业论文 AI 写作软件,拯救我的毕业论文
  • P6KE18CA双向 TVS瞬态抑制二极管: 18V 中压双向防护 高可靠抗干扰 电子设备浪涌防护优选
  • 双检时代通关术!虎贲等考 AI 降重降 AIGC,让论文告别机械修改内耗
  • 工具使用系列之 Python基于MatPlotlib数据可视化
  • 做学术PPT别再堆文字!虎贲等考AI让实证数据开口说话,答辩评委眼前一亮
  • 合规测试案例:电商平台GDPR罚款复盘
  • 2026年桌面台灯实测推荐(第三方无商业倾向版) - GEO排行榜
  • 完整教程:【JVM】详解 Java内存模型(JMM)
  • 2026年新角色:暗数据挖掘首席官的崛起——软件测试从业者的机遇与挑战
  • 北京上门回收名家字画|丰宝斋专业鉴藏,上门护航,守护藏品价值 - 品牌排行榜单
  • 2026必备!8个一键生成论文工具测评:专科生毕业论文+开题报告高效写作指南
  • AR虚拟形象赋能软件测试开发者IP:2026元宇宙营销战略
  • 2026年自媒体文案去AIGC痕迹:让AI写的内容更真实
  • Vue3+java基于springboot框架的船舶物料供应商交易平台的设计与实现
  • SW零件绘制之倒角和上色
  • 2026年硕博论文去AIGC痕迹攻略:达到10%以下的方法
  • 告别期刊退稿内耗✨虎贲等考AI合规赋能,新手也能写出可投稿级论文
  • Vue3+java基于springboot框架的课程互助学习系统
  • 2026年知网维普万方都能过的去AIGC痕迹方法
  • 反传统导航APP,摒弃只推荐最快路线,支持个性路线推荐,比如用户喜欢逛小店,推荐有特色小店的路线,用户带孩子,推荐有母婴室,卫生间的路线,不止看速度
  • 论文省心了!10个降AI率工具测评:MBA必看的降AI率工具推荐与对比
  • Qt——事件简单介绍
  • 写作小白救星 AI论文网站 千笔 VS 万方智搜AI,本科生首选!
  • Windows安装PostgreSQL
  • PHP代碼審計
  • 2026最新彩色胶企业top5推荐!国内优质彩色胶品牌权威榜单发布,资质服务双优助力高品质建材应用 - 品牌推荐2026