C# 对数组中的二进制搜索感到困惑
我对BinarySearch有点困惑,因为在很多情况下它不起作用。下面的程序显示-5和-1。但它应该显示1和3,对吗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
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);
}
想想二进制搜索是如何工作的。基本假设是“如果当前项目太小,则目标项目在其上方”。在你的数组中不是这样的。