对数组中的二进制搜索感到困惑

时间:2013-11-13 15:40:18

标签: c# binary-search

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

5 个答案:

答案 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);
    }