📅  最后修改于: 2023-12-03 14:40:28.575000             🧑  作者: Mango
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
方法不能保证返回的索引是哪一个,它只返回这些元素中的一个。