我对BinarySearch有点困惑,因为在很多情况下它不起作用。下面的程序显示-5和-1。但它应该显示1点和3点我对吗?
using System;
namespace Binary
{
class Program
{
static void Main()
{
int[] array = { 12, 45, 23, 3, 67, 43 };
int index1 = Array.BinarySearch<int>(array, 45);
int index2 = Array.BinarySearch<int>(array, 3);
Console.WriteLine(index1);
Console.WriteLine(index2);
}
}
}
答案 0 :(得分:10)
要使 BinarySearch 正常工作,数组需要排序。你不是,所以它无法正常工作。
Quote: "Searches an entire one-dimensional sorted array for a specific element"
答案 1 :(得分:6)
正如documentation明确指出的那样,BinarySearch()
只有在数组排序时才有意义:
在调用此方法之前,必须对array 进行排序。
答案 2 :(得分:2)
二进制搜索仅适用于已排序的数组。由于搜索未找到您的值,因此返回负数。它们记录在这里:
http://msdn.microsoft.com/en-us/library/2cy9f6wb(v=vs.110).aspx
在搜索之前订购您的列表,它应该返回正确的值。如果您不想订购列表,请使用IndexOf
代替BinarySearch
。
答案 3 :(得分:1)
直接从马的嘴里出来:
搜索特定的整个一维排序System.Array 元素,使用每个实现的System.IComparable接口 System.Array的元素和指定的对象。
您必须先对列表进行排序,以便BinarySearch
能够做到这一点。
答案 4 :(得分:0)
像其他人一样说你的数组必须排序,所以只需在int []数组之后输入Array.Sort(array)......就像这样:
static void Main(string[] args)
{
int[] array = { 12, 45, 23, 3, 67, 43 };
Array.Sort(array);
int index1 = Array.BinarySearch<int>(array, 45);
int index2 = Array.BinarySearch<int>(array, 3);
Console.WriteLine(index1);
Console.WriteLine(index2);
}