C# 二分查找:从原理到实现(新学者思考)
1. 什么是二分查找二分查找Binary Search是一种在有序数组中查找特定元素的高效算法。它的核心思想是“分而治之”每次将搜索范围缩小一半直到找到目标值或范围为空。时间复杂度为 O(log n)比线性查找的 O(n) 快得多尤其适合大规模数据。2. 算法原理二分查找的基本步骤如下设定左右边界 left 和 right初始分别为数组的第一个和最后一个索引。计算中间索引 mid left (right - left) / 2这样可以防止大数相加时溢出。将中间元素与目标值比较若相等返回 mid若中间元素小于目标值说明目标在右半部分将 left 更新为 mid 1若中间元素大于目标值说明目标在左半部分将 right 更新为 mid - 1。重复步骤 2-3直到 left 大于 right表示未找到目标值。3. 边界条件与常见坑点在实际编码中二分查找的边界处理非常容易出错重点关注循环条件使用 while (left right)当 left 和 right 相等时仍需判断该位置。中间索引计算优先使用 left (right - left) / 2避免 (left right) / 2 的溢出风险。左右边界更新left mid 1 或 right mid - 1否则可能陷入死循环。返回值未找到时通常返回 -1 或插入位置的按位取反值。4. C# 标准实现迭代版下面给出一个经典的迭代二分查找方法适用于 int 数组/// summary /// 在有序整数数组中执行二分查找返回目标值的索引未找到返回 -1。 /// /summary public static int BinarySearch(int[] arr, int target) { if (arr null || arr.Length 0) return -1; int left 0; int right arr.Length - 1; while (left right) { // 安全计算中间索引避免溢出 int mid left (right - left) / 2; if (arr[mid] target) { return mid; } else if (arr[mid] target) { left mid 1; // 目标在右半区 } else { right mid - 1; // 目标在左半区 } } return -1; // 未找到 }5. C# 递归实现二分查找也可以写成递归形式逻辑更直观但需要注意递归深度和栈空间消耗/// summary /// 二分查找的递归版本返回目标索引未找到返回 -1。 /// /summary public static int BinarySearchRecursive(int[] arr, int target) { return BinarySearchRecursive(arr, target, 0, arr.Length - 1); } private static int BinarySearchRecursive(int[] arr, int target, int left, int right) { if (left right) return -1; int mid left (right - left) / 2; if (arr[mid] target) return mid; else if (arr[mid] target) return BinarySearchRecursive(arr, target, mid 1, right); else return BinarySearchRecursive(arr, target, left, mid - 1); }6. 查找第一个或最后一个目标值变种如果数组中有重复元素可能需要找到第一次出现的位置或最后一次出现的位置。这是二分查找的常见变种在 C# 中也很容易实现/// summary /// 查找目标值在数组中第一次出现的索引。 /// /summary public static int FindFirst(int[] arr, int target) { int left 0, right arr.Length - 1; int result -1; while (left right) { int mid left (right - left) / 2; if (arr[mid] target) { result mid; // 记录当前找到的位置 right mid - 1; // 继续向左搜索更早的匹配 } else if (arr[mid] target) left mid 1; else right mid - 1; } return result; } /// summary /// 查找目标值在数组中最后一次出现的索引。 /// /summary public static int FindLast(int[] arr, int target) { int left 0, right arr.Length - 1; int result -1; while (left right) { int mid left (right - left) / 2; if (arr[mid] target) { result mid; // 记录当前找到的位置 left mid 1; // 继续向右搜索更晚的匹配 } else if (arr[mid] target) left mid 1; else right mid - 1; } return result; }7. 使用 C# 内置的 Array.BinarySearch.NET 框架本身就提供了二分查找方法Array.BinarySearch它返回的是找到的索引如果未找到则返回一个负数其按位取反后就是目标应插入的位置。使用起来非常方便int[] sortedArray { 1, 3, 5, 7, 9 }; int index Array.BinarySearch(sortedArray, 5); // 返回 2 int notFound Array.BinarySearch(sortedArray, 4); // 返回负数 if (notFound 0) { // ~notFound 就是 4 应该插入的位置以保持数组有序 int insertPos ~notFound; Console.WriteLine($4 应插入在索引 {insertPos} 处); }8. 常见面试题与应用场景在旋转有序数组中查找目标值LeetCode 33。寻找峰值元素LeetCode 162。计算平方根LeetCode 69。搜索二维矩阵LeetCode 74。在有序数据集合中快速定位、范围查询等。这些题目本质上都是二分查找思想的延伸掌握了基础实现后可以灵活运用边界调整来适应不同需求。9. 总结实现时牢牢记住三点有序数组、正确的中间点计算和合适的边界收缩。平时也可以直接使用Array.BinarySearch减少重复造轮子但理解其背后的原理才能让你在复杂问题中游刃有余。新手强烈推荐看b站up蓝不过海的演示视频

相关新闻

Qwen-Audio-3.0-TTS:16种语言20种方言的多语言语音合成技术解析

Qwen-Audio-3.0-TTS:16种语言20种方言的多语言语音合成技术解析

如果你正在为多语言语音合成项目发愁,或者对当前TTS模型的语言覆盖能力不满意,那么通义最新发布的Qwen-Audio-3.0-TTS绝对值得你深入了解。这个模型不仅支持16种语言和20种方言,更重要的是,它在语音质量、情感表现和部署便利性上都…

2026/7/23 4:01:46 阅读更多 →
鸿蒙三方库 | harmony-utils之LocationUtil位置获取与订阅详解

鸿蒙三方库 | harmony-utils之LocationUtil位置获取与订阅详解

前言 位置服务是LBS应用的核心能力,如地图导航、附近搜索、运动追踪等。pura/harmony-utils 的 LocationUtil 封装了位置获取和订阅方法,帮助开发者轻松实现定位功能。本文将从API说明、代码实战、进阶用法、常见问题等多个维度进行全面讲解,…

2026/7/23 4:01:46 阅读更多 →
二维深度卷积网络在轴承故障诊断中的实践与优化

二维深度卷积网络在轴承故障诊断中的实践与优化

1. 二维深度卷积网络在轴承故障诊断中的应用概述轴承作为旋转机械的核心部件,其运行状态直接影响设备整体可靠性。传统基于信号处理的诊断方法(如FFT分析、小波变换)在复杂工况下存在特征提取困难、泛化能力不足等问题。二维深度卷积网络&…

2026/7/23 4:01:45 阅读更多 →

最新新闻

为什么团队接入 Hermes 后联调反而慢了?先看懂上下文切分逻辑

为什么团队接入 Hermes 后联调反而慢了?先看懂上下文切分逻辑

聊《Hermes真能提效吗?先看流程里最慢的那一步》之前,先说一句实在的:别急着背概念,先看它在真实项目里到底解决什么问题。 摘要 先把这篇文章的目标说清楚:看完之后,你应该能判断这件事值不值得做&#…

2026/7/23 4:41:00 阅读更多 →
VRRP MSTP

VRRP MSTP

实验要求- 存在两个用户业务网,分布为VLAN 10和VLAN 20,需要SW1作为VLAN 10根桥和VRRP-master设备- SW2作为VLAN 20根桥和VRRP-master设备- 网段自行规划,全网可达实验思路测试全网可通

2026/7/23 4:41:00 阅读更多 →
达梦数据库单机主备集群搭建实战指南

达梦数据库单机主备集群搭建实战指南

1. 前言达梦数据库(DM Database)作为国产数据库的代表,其高可用方案是保障业务连续性的关键。主备集群(DataWatch)是达梦数据库实现高可用的核心组件,通过实时同步数据,在主库故障时能够快速切换…

2026/7/23 4:41:00 阅读更多 →
SolidWorks齿轮建模入门:从参数计算到3D建模全解析

SolidWorks齿轮建模入门:从参数计算到3D建模全解析

1. SolidWorks齿轮建模基础入门作为一名机械设计工程师,我经常遇到刚接触SolidWorks的新手对齿轮建模感到困惑。齿轮作为机械传动中最基础的零件之一,掌握其建模方法确实是每个SolidWorks使用者必备的技能。今天我就用最直白的方式,手把手教你…

2026/7/23 4:41:00 阅读更多 →
紧急预警:传统CLV模型已失效!用强化学习重构客户价值评估框架(含A/B测试结果对比表)

紧急预警:传统CLV模型已失效!用强化学习重构客户价值评估框架(含A/B测试结果对比表)

更多请点击: https://codechina.net 第一章:紧急预警:传统CLV模型已失效!用强化学习重构客户价值评估框架(含A/B测试结果对比表) 当LTV/CAC比率连续三个季度跌破1.2,而留存率预测误差高达37%&a…

2026/7/23 4:41:00 阅读更多 →
AI时代规范驱动开发:提升代码质量与效率

AI时代规范驱动开发:提升代码质量与效率

1. 规范驱动开发:AI时代的生产级代码实践三年前我第一次尝试用AI生成代码时,面对满屏看似合理实则漏洞百出的函数,不得不花更多时间debug。直到去年接触规范驱动开发(Specification-Driven Development)后,…

2026/7/23 4:40:00 阅读更多 →

日新闻

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

更多请点击: https://intelliparadigm.com 第一章:从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表) 当AI副业主理人不再仅满足于单次服务交付,而是主动构建可复用、可裂变、可…

2026/7/23 0:00:25 阅读更多 →
AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

更多请点击: https://codechina.net 第一章:AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析 在对2,346篇跨行业AI生成文案的A/B测试数据进行聚类分析后,我们发现&#xff1…

2026/7/23 0:01:26 阅读更多 →
Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具 【免费下载链接】chitchatter Secure peer-to-peer chat that is serverless, decentralized, and ephemeral 项目地址: https://gitcode.com/gh_mirrors/ch/chitchatter Chitchatter是一款革命性的安…

2026/7/23 0:01:26 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/22 8:58:19 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/22 19:43:43 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/22 12:54:44 阅读更多 →

月新闻