C# BinarySearch(Object):在整个集合中搜索指定的对象,并返回第一个匹配项的索引

  • Post category:C#

C#中的BinarySearch(Object)方法是用于在排序的数组中查找指定的对象,返回该对象在数组中的索引。下面是该方法的语法:

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

其中,array为需要查找的数组,value为需要查找的对象。

该方法的搜索过程是利用二分法查找,时间复杂度为O(logn),因此,要求所操作的数组必须是已排序的。

该方法返回的是指定对象在数组中的索引,如果指定对象不存在于数组中,则返回的是一个负数,该负数是大于指定对象索引的反码(complement)。

下面是一个示例:

int[] numbers = { 1, 3, 5, 7, 9 };
int index = Array.BinarySearch(numbers, 3);
Console.WriteLine(index);  // 输出:1

在上面的示例中,我们创建了一个已经排序的整型数组numbers,然后使用BinarySearch方法查找值为3的对象,得到了该对象在数组中的索引1。

下面再给出一个使用BinarySearch方法查找字符串示例:

string[] names = { "Alice", "Bob", "Charlie", "Eve" };
int index = Array.BinarySearch(names, "Bob");
Console.WriteLine(index);  // 输出:1

在上面的示例中,我们创建了一个已经排序的字符串数组names,并使用BinarySearch方法查找名为”Bob”的字符串对象,得到了该对象在数组中的索引1。

需要注意的是,如果搜索的对象类型与数组元素类型不一致,那么比较的结果将根据搜索的对象类型执行。例如,如果搜索的对象是int类型,而数组中的元素是double类型,那么会根据int类型进行比较,而不是以double类型比较。

如果数组中存在多个与搜索对象相同的元素,那么返回值是不确定的,也就是说,可能返回任意一个相同元素的索引。

最后,需要注意的是,现代的C#版本中提供了BinarySearch的更多重载方法,可以支持更多的搜索方式和自定义的比较器,使用时需要根据具体需要选择相应的重载方法。