4

我对 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);
        }
    }
}
4

5 回答 5

10

要使BinarySearch工作,需要对数组进行排序。你的不是,所以它不能正常工作。

引用:“在整个一维排序数组中搜索特定元素”

于 2013-11-13T15:42:19.917 回答
6

正如文档明确指出的那样,BinarySearch()只有对数组进行排序才有意义:

在调用此方法之前必须对数组进行排序。

于 2013-11-13T15:42:19.663 回答
2

二进制搜索仅适用于已排序的数组。由于搜索未找到您的值,因此返回负数。它们记录在这里:

http://msdn.microsoft.com/en-us/library/2cy9f6wb(v=vs.110).aspx

在搜索之前订购您的列表,它应该返回正确的值。如果您不想对列表进行排序,请使用IndexOf而不是BinarySearch.

于 2013-11-13T15:46:02.300 回答
1

直接从马嘴里说:

使用由 System.Array 的每个元素和指定对象实现的 System.IComparable 接口,在整个一维排序 System.Array 中搜索特定元素。

您必须先对列表进行排序,BinarySearch才能做到这一点。

于 2013-11-13T15:44:23.337 回答
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);
    }
于 2013-11-13T16:15:37.660 回答