news 2026/4/18 3:31:07

搜索算法:二分查找

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
搜索算法:二分查找

二分查找(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表示目标不存在。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 3:30:12

反传统租客,摒弃用户搜房源,根据用户预算,工作地点,生活习惯(如喜欢做饭,养宠物),自动匹配房源,还能AI虚拟看房,无需实时跑,节省时间。

1. 实际应用场景与痛点场景传统租房流程&#xff1a;1. 用户在平台上搜索房源2. 筛选价格、位置、设施3. 逐一联系房东/中介4. 多次实地看房5. 比较后决定这个过程耗时耗力&#xff0c;且信息不对称。痛点- 信息过载&#xff1a;海量房源&#xff0c;筛选困难- 时间成本高&…

作者头像 李华
网站建设 2026/4/18 3:25:53

2026年有退款保障的去AIGC痕迹工具:不达标全额退

2026年有退款保障的去AIGC痕迹工具&#xff1a;不达标全额退 花钱处理完还是不达标&#xff0c;找客服退款&#xff0c;客服说"我们不保证效果"。 我同学就遇到过这种事。100多块打水漂了&#xff0c;气死个人。 后来我选工具就只看一条&#xff1a;不达标能不能退…

作者头像 李华
网站建设 2026/4/18 3:29:01

malloc每秒百万次调用扛不住?看Nginx如何用500行代码打造零碎片内存池

一、高并发服务器的内存困局 写过高并发服务器的人,多少都被内存管理折腾过。 我之前做一个长连接网关项目的时候,压测到QPS上万就开始出问题:响应延迟波动剧烈,p99从2ms飙到50ms,GC似的卡顿周期性出现。排查了半天,最后用perf一看,30%的CPU时间花在了malloc/free上。…

作者头像 李华
网站建设 2026/4/17 13:18:02

2026年双引擎技术去AIGC痕迹:为什么效果更好

2026年双引擎技术去AIGC痕迹&#xff1a;为什么效果更好 选去AIGC痕迹工具时&#xff0c;经常看到"双引擎""多引擎"这些词。 到底什么是双引擎&#xff1f;为什么双引擎效果更好&#xff1f; 先说结论&#xff1a;双引擎技术用两套不同的处理方法&#x…

作者头像 李华