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

C++二分法详解

C++二分法详解


文章目录

  • C++二分法详解
    • 一、算法简介
    • 二、算法原理
    • 三、代码实现
    • 四、复杂度分析
    • 五、常见练习题

一、算法简介


二分查找(Binary Search)是一种 高效搜索算法 ,适用于 有序序列 。通过每次将搜索范围减半,时间复杂度为O(log n)。


在这里插入图片描述

二、算法原理

核心思想(以找到第一个大于等于target的数字为例)

  1. 确定搜索区间的初始边界 [left, right]
  2. 计算中间位置:

1.mid = (left + right)/2
2.mid = left + (right - left)/2(防溢出写法)

3.比较中间元素与目标值:

• 若 arr[mid] < target → 搜索右半区 [mid+1, right]
• 若 arr[mid] >= target → 搜索左半区 [left, mid]

4.重复直到找到目标或区间无效


数学本质:

每次将问题规模缩小为原来的1/2 ;
最多需要 log₂(n) 次迭代;

三、代码实现


标准版本(循环实现)

int left = 1, right = arr.size() ;while (left < right) {  // 注意等号int mid = left + (right - left) / 2;  // 防止溢出if (arr[mid] < target) {left = mid + 1;  // 更新左边界} else {right = mid;  // 更新右边界}}//第一个大于等于target的数字位于下标为left的元素上
}

四、复杂度分析

• 时间复杂度:O(log n)


五、常见练习题

1.在数组中查找元素的第一个和最后一个位置
2.求x的平方根(保留整数部分)
3.在旋转排序数组中找最小值

http://www.xdnf.cn/news/108487.html

相关文章:

  • el-table 目录树列表本地实现模糊查询
  • Linux部署Redis主从
  • 天梯-零头就抹了吧
  • 实操Obsidian+Ollama+deepseek构建本地知识库
  • C语言五子棋项目
  • [计算机科学#1]:计算机的前世今生,从算盘到IBM的演变之路
  • flex布局说明
  • 百万点数组下memset、memcpy与for循环效率对比及原理分析
  • 经典算法 小数点后的第n位
  • 语音合成之四基于LLM的语音合成
  • Sql刷题日志(day5)
  • JVM理解(通俗易懂)
  • 2025年渗透测试面试题总结-拷打题库14(题目+回答)
  • 时间自动填写——电子表格公式的遗憾(DeepSeek)
  • A13 自定义系统服务使用总结
  • Kafka集群
  • ABP-Book Store Application中文讲解 - Part 0:开发环境搭建
  • 意见反馈留言二维码制作
  • leetcode-枚举
  • Langchain coercion简介
  • deeplab语义分割训练自定数据集
  • leve1.4
  • LLama Factory从入门到放弃
  • iThenticate英文查重系统怎么用?
  • 【AI论文】在非政策指导下学习推理
  • 中药企业数字化转型:从传统制造到智能制药的跨越
  • 3D模型格式转换工具HOOPS Exchange 2025.3.0更新:iOS实现Rhino格式支持!
  • TypeScript-知识点梳理
  • 艾瑞:高标准化场景AI渗透越来越高,Agent将是未来AI+HRM的最佳形态
  • 【UML建模】数据流图 绘制