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

C# 对数组中的二进制搜索感到困惑,c#,binary-search,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.BinarySearc

我对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);
        }
    }
}
使用系统;
名称空间二进制
{
班级计划
{
静态void Main()
{
int[]数组={12,45,23,3,67,43};
int index1=Array.BinarySearch(数组,45);
int index2=Array.BinarySearch(数组,3);
控制台写入线(index1);
控制台写入线(index2);
}
}
}
正如前面所明确指出的,
BinarySearch()
只有在数组排序时才有意义:

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


要使二进制搜索工作,数组需要排序。你的不是,所以它不能正常工作


直接从马嘴里:

搜索整个一维排序系统。数组中的特定 元素,使用每个 数组的元素,并由指定的对象执行


您必须首先对列表进行排序,以便
BinarySearch
发挥神奇的作用。

二进制搜索只能在排序的数组上工作。返回负数是因为搜索未找到您的值。它们记录在这里:


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

像其他人说的那样,必须对数组进行排序,所以只需输入array.Sort(array)after int[]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);
    }
static void Main(字符串[]args)
{
int[]数组={12,45,23,3,67,43};
排序(数组);
int index1=Array.BinarySearch(数组,45);
int index2=Array.BinarySearch(数组,3);
控制台写入线(index1);
控制台写入线(index2);
}

想想二进制搜索是如何工作的。基本假设是“如果当前项目太小,则目标项目在其上方”。在你的数组中不是这样的。