C# BinarySearch 的返回值

binarySearch()方法的返回值为:

1、如果找到关键字,则返回值为关键字在数组中的位置索引,且索引从0开始

2、如果没有找到关键字,返回值为负的插入点值,所谓插入点值就是第一个比关键字大的元素在数组中的位置索引,而且这个位置索引从1开始。

假设有排序数组:[10, 20, 30, 40, 50]

情况1:查找 25(不存在)

cs 复制代码
// BinarySearch 查找 25
// 应该插入在 20 和 30 之间,也就是索引 2 的位置,但是索引从1开始,所以变成3,再取负值,就是-3

int index = BinarySearch(25);  // 返回 -3
//-3使用 ~(按位取反)可以得到从0开始的插入点值
int insertIndex = ~index;       // ~(-3) = 2
// insertIndex = 2

情况2:查找 5(比所有值都小)

cs 复制代码
// BinarySearch 查找 5
// 应该插入在最前面,索引 0 的位置
// 所以返回:-1

int index = BinarySearch(5);    // 返回 -1
int insertIndex = ~index;       // ~(-1) = 0
// insertIndex = 0

情况3:查找 60(比所有值都大)

cs 复制代码
// BinarySearch 查找 60
// 应该插入在最后,索引 5 的位置(数组长度)
// 所以返回: -6

int index = BinarySearch(60);   // 返回 -6
int insertIndex = ~index;       // ~(-6) = 5
// insertIndex = 5
相关推荐
此生决int11 小时前
深入理解C++系列(06)——模版初阶与STL
开发语言·c++
布鲁飞丝11 小时前
对 .NET线程 异常退出引发程序崩溃的反思
数据库·c#·.net
SamChan9011 小时前
WebSocket实现PDF翻译进度实时推送:Go后端+React前端的完整方案
前端·websocket·pdf·c#·react·机器翻译
swany11 小时前
同步数据中,只需要几秒钟 & milvus向量数据库不可用 dify1.16.1 升级后踩坑记录
开发语言·python·numpy
小杍随笔11 小时前
2025年Rust GUI框架实战万字避坑指南
开发语言·后端·rust
noipp11 小时前
推荐题目:洛谷 P5843 [SCOI2012] Blinker 的噩梦
c语言·数据结构·c++·算法·游戏·洛谷·luogu
geovindu11 小时前
CSharp: LogHelper
开发语言·后端·c#·.net
奈斯先生Vector12 小时前
大模型 Agentic Workflow 架构解构:异构 API 调度与 Token 路由的多模态系统设计
开发语言·前端·架构·prompt·aigc·音视频
冻柠檬飞冰走茶12 小时前
PTA基础编程题目集 7-20 打印九九口诀表(C语言实现)
c语言·开发语言·数据结构·算法
caishenzhibiao12 小时前
顺势捕猎者副图 同花顺期货通指标
java·c语言·c#