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
相关推荐
斯内科2 小时前
C#验证拉马努金圆周率公式
c#·拉马努金圆周率
代码雕刻家2 小时前
1.8.课设实验-数据结构-哈夫曼树的建立与应用
c语言·数据结构
尼古拉斯·纯情暖男·天真·阿玮2 小时前
[JavaEE初阶] 进程和线程的区别和联系
java·开发语言
沐知全栈开发2 小时前
TypeScript Array(数组)
开发语言
陶陶name2 小时前
Metal Compute Pipeline:Metal-C++ 环境配置与简单算子实现
开发语言·c++
认真敲代码的小火龙2 小时前
【JAVA项目】基于JAVA的宿舍管理系统
java·开发语言·课程设计
无限进步_2 小时前
寻找数组中缺失数字:多种算法详解与比较
c语言·开发语言·数据结构·算法·排序算法·visual studio
lsx2024062 小时前
C 标准库 - <assert.h>
开发语言
Wzx1980123 小时前
go接受输入方式
开发语言·后端·golang