📌  相关文章
📜  Array.BinarySearch(Array,Object)方法,带有C#中的示例(1)

📅  最后修改于: 2023-12-03 15:29:28.340000             🧑  作者: Mango

Array.BinarySearch 方法

Array.BinarySearch(Array, Object) 方法在有序数组中搜索指定对象并返回其索引,如果未找到,则返回负值。此方法使用二分查找算法。

语法
public static int BinarySearch(Array array, object value);

参数:

  • array:要搜索的有序一维数组。
  • value:要查找的对象。

返回值:

  • 如果找到 value,则为 value 在有序数组中的索引(从零开始)。
  • 如果未找到 value,并且 value 小于 array 中的一个或多个元素,则为负数,该负数是按比较器定义的 value 与 array 中的最后一个元素之间的关系的相反数。
  • 如果未找到 value,并且 value 大于 array 中的一个或多个元素,则为负数,该负数是大于数组中的所有元素的值的(数组长度 + 1)的相反数。
示例
using System;

class MainClass {
  public static void Main (string[] args) {
    int[] arr = { 2, 5, 8, 10, 12, 15 };
    int index = Array.BinarySearch(arr, 10);
    Console.WriteLine(index); // Output: 3
  }
}

在此示例中,我们声明一个有序的整数数组,并使用 Array.BinarySearch 方法查找值为 10 的索引。方法返回 3,表示 10 在数组中的索引为 3。

如果我们搜索一个不存在的值,该方法将返回负值。例如,如果我们重新运行上面的代码,但将值改为 7,方法将返回 -3,表示 -value 应插入数组索引为 2 的地方,才能保持排序。

注意事项
  • Array.BinarySearch 方法只能用于已排序的一维数组。

  • 如果你要在多维数组中搜索,需要先使用 Array.Copy 方法将多维数组复制到一维数组中,然后对一维数组进行搜索。

  • 如果有多个元素等于要搜索的值,则无法保证该方法将找到哪个元素。在这种情况下,建议使用 Array.IndexOf 方法。

  • 传递给方法的比较器决定了如何比较查找的值和数组中的元素。默认情况下,使用元素的自然排序。如果你想自定义排序,你需要创建一个实现了 System.Collections.IComparer 接口的比较器类。并将其传递给 Array.BinarySearch 方法的第三个参数。