📌  相关文章
📜  C#| Array.BinarySearch(Array,Object,IComparer)方法(1)

📅  最后修改于: 2023-12-03 14:40:28.605000             🧑  作者: Mango

C# | Array.BinarySearch(Array, Object, IComparer)方法

简介

Array.BinarySearch() 方法是在 .NET Framework 1.1 版本中引入的方法,该方法用于在已排序的一维数组中搜索指定元素,并返回该元素在数组中的索引。如果数组中不存在该元素,则返回负数值。这个方法非常有用,可以在需要快速搜索某个元素的时候,提高代码的效率和准确度。

语法

以下是 Array.BinarySearch() 方法的语法:

public static int BinarySearch(Array array, Object value, IComparer comparer)
参数

Array:一维数组,其中要搜索的元素。

value:要搜索的值。

comparer:用于比较数组元素的实现 IComparer 接口的对象。如果不指定此参数,将使用 IComparer 接口的默认实现。

返回值

如果找到 value,则返回其在数组中的索引(从 0 开始)。如果未找到 value,则返回一个负数,该负数是将 value 插入数组中所需的索引位置,如下所示: ~(-[insertionPoint] - 1)。

示例

以下示例演示如何使用 Array.BinarySearch() 方法搜索数组:

int[] numbers = { 2, 4, 6, 8, 10 };

int index = Array.BinarySearch(numbers, 6);
Console.WriteLine("Index of 6 is: " + index);

index = Array.BinarySearch(numbers, 5);
Console.WriteLine("Index of 5 is: " + index);

输出:

Index of 6 is: 2
Index of 5 is: -3 // -insertionPoint - 1
注意事项
  • 为了使 Array.BinarySearch() 方法正常工作,必须先对数组进行排序,否则该方法的行为是未定义的。可以使用 Array.Sort() 或将数组传递给某些其他排序算法来排序数组。
  • 如果有多个符合要求的元素,该方法不保证返回哪个元素的索引。
  • 如果搜索的值(value)与数组中的某个元素相同,则索引就是该元素的索引。
  • 如果搜索值(value)在数组中未找到,则返回的索引是将该搜索值插入到数组中的索引位置,即将其插入到“理论位置”,而不是数组的末尾。为了计算这个插入点的值,该方法使用插入排序算法。插入排序算法的时间复杂度是 O(N^2),如果数组较大,则可能需要很长时间才能找到插入点,因此请确保使用此方法时要注意搜索值的范围。