C# 中 Array.BinarySearch(Array, Int32, Int32, Object) 方法及其示例

2024 年 8 月 29 日 | 4 分钟阅读

在本文中,您将通过 C# 中的 "Array.BinarySearch(Array, Int32, Int32, Object)" 方法了解其语法、参数和示例。

什么是 Array.BinarySearch 方法?

C# 中的 "Array.BinarySearch(Array, Int32, Int32, Object)" 方法是 Array 类的一部分,可用于对一维已排序的数组执行二分搜索。此方法对于在给定数组范围中查找特定元素非常有用。为了使二分搜索正常工作,数组必须是已排序的。如果数组未排序,结果将是未定义的。

二分搜索是一种高效的算法,它通过不断将搜索范围减半来实现。对于大型数据集,它比线性搜索更快,时间复杂度为 O(logn)。

为了进行比较,数组中的每个元素都必须提供自定义的 IComparer 实现,或者必须是实现 IComparable 接口的类型。

语法

它具有以下语法:

参数

array: 将被搜索的已排序的一维数组。

index: 这是搜索范围的起始索引。

length: 搜索范围中的元素数量。

value: 在给定范围内需要找到的元素。

返回值

  1. 如果找到搜索对象,则返回其索引 'i'。
  2. 如果未找到搜索对象,则返回一个负数 '-(x + 1)',其中 'x' 是大于搜索对象的下一个元素的索引;如果不存在更大的元素,则返回数组长度的按位非。
  3. 如果使用未排序的数组调用此方法,则返回值可能不正确,并且即使值存在于数组中,也可能返回负数。

异常

  1. ArgumentNullException: 如果数组为 null,则引发 ArgumentNullException。
  2. RankException: 如果数组是多维的。
  3. ArgumentOutOfRangeException: 当范围小于下界或长度小于零时,会发生 ArgumentOutOfRangeException。
  4. ArgumentException: 当值与数组元素的类型不兼容时,或者当索引和长度无法指示数组的有效范围时。
  5. InvalidOperationException: 如果在搜索中找到的元素未实现 IComparable 接口且 Value 也未实现,则会发生 InvalidOperationException。

示例

让我们通过一个示例来说明 C# 中的 Array.BinarySearch() 方法。

输出

Full Array Search
Value 11 found at index 5
Subrange Search
Value 11 found at index 5
Not in Array Search
Value 8 not found. The next larger element is at index 4

说明

1. 数组初始化

已初始化一个名为 num_bers 的整数数组,其中包含已排序的值。

2. 搜索参数

要搜索的目标值为 11。

3. 二分搜索

使用 "Array.BinarySearch" 方法在两种情况下执行二分搜索:

  • 第一种情况是在整个数组中搜索 target_Value。
  • 第二种情况是在前七个元素中搜索 target_Value。

4. 搜索数组中不存在的值

调用该方法以搜索数组中不存在的值 (notIn_ArrayValue)。

5. 打印结果

使用一个辅助方法 PrintResult 来打印每种情况的结果。

它会打印值是否找到;如果未找到,则提供有关下一个较大元素的信息。

此示例演示了在子范围中搜索目标值、未找到值以及找到值的情况。之后,它将打印与结果相关的说明性消息。