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

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

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

Array.BinarySearch(Array, Int32, Int32, Object, IComparer) 方法是 C# 中的一个静态方法,用于在已排序的数组中搜索指定元素的索引。它使用二分查找算法来快速定位元素。

语法
public static int BinarySearch(Array array, int index, int length, object value, IComparer comparer)
参数
  • array:必需。要搜索的一维数组。
  • index:必需。搜索范围的起始索引。
  • length:必需。要搜索的范围的长度。
  • value:必需。要查找的对象。
  • comparer:可选。比较对象的 IComparer 实现,如果为 null,则使用元素的默认比较器。
返回值

如果找到 value,则返回指定元素的非负索引;如果没有找到 value,则返回一个负数,该负数是 value 可插入数组中的位置的按位求补。具体规则如下:

  • 如果 value 大于数组中的所有元素,则返回按位求补的 length+1。即 -length-1
  • 如果 value 小于数组中的所有元素,则返回按位求补的 0。即 -1
  • 如果找到多个相同的 value,则返回找到的相同元素的索引中的第一个索引。
示例
int[] arr = { 10, 20, 30, 40, 50 };

int index = Array.BinarySearch(arr, 0, arr.Length, 30, Comparer<int>.Default);

if (index > 0)
{
    Console.WriteLine("元素 30 在数组中的索引为:" + index);
}
else if (index < 0)
{
    Console.WriteLine("元素 30 不在数组中,可插入的位置为:" + (-(index + 1)));
}
示例说明

在上述示例中,我们有一个已排序的整数数组 arr,我们想要查找值为 30 的元素在数组中的索引。

我们使用了 Array.BinarySearch 方法来搜索元素 30。由于数组中存在该元素,返回的索引为 2。因此,输出显示为 元素 30 在数组中的索引为:2

注意事项
  • 调用 Array.BinarySearch 之前,必须将数组排序,否则结果将是不确定的。
  • 如果 comparer 参数为 null,则使用元素的默认比较器。默认情况下,数组包含的元素必须实现 IComparable 接口。
  • 如果 comparer 参数为非 null,则使用自定义的比较器来确定元素的顺序。
  • 当多个元素具有相同的值时,BinarySearch 方法不能保证返回的索引是哪一个,它只返回这些元素中的一个。
参考链接