繁体   English   中英

对数组中的BinarySearch感到困惑

[英]Confused about BinarySearch in array

我对BinarySearch有点困惑,因为在很多情况下它不起作用。 下面的程序显示-5和-1。 但它应该显示1和3 am我对吗?

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

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

Quote:“搜索一个特定元素的整个一维排序数组”

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

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

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

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

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

直接从马的嘴里:

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

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

像其他人说你的数组必须排序,所以只需在int []数组后输入Array.Sort(数组)...像这样:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM