[英]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工作,需要对数组进行排序 。 你不是,所以它不能正常工作。
正如文档明确指出的那样, 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.