我在C#中的控制台窗口应用程序中实现了二进制搜索算法。我正在为数组生成随机值并分别使用Random()
和Array.Sort()
函数对它们进行排序。c# - 二进制搜索算法随机生成的数组项不工作
的问题 - 无论什么重点(数组中要搜索的项目),我给,该程序将返回未找到键在使用Random
功能
如果我使用Console.ReadLine()
手动输入数组元素,则不会发生这种情况。
TLDR:当手动输入数组项二进制搜索算法工作正常,但当阵列项目,采用Random
函数来产生不起作用。
任何人都可以指出我在做什么错误?
我的代码 - 随机生成的数组项。
namespace BSA
{
class Program
{
static void Main(string[] args)
{
var arr = new int[10];
Random rnd = new Random();
for (int i = 0; i < arr.Length; i++)
{
arr[i] = rnd.Next(1, 1000);
}
Array.Sort(arr);
for (int i = 0; i < arr.Length; i++)
{
Console.Write("{0}\n", i);
}
while (true)
{
Console.WriteLine("Enter the number to be searched in the array.");
var searchItem = Convert.ToInt32(Console.ReadLine());
var foundPos = Search(arr, searchItem);
if (foundPos > 0)
{
Console.WriteLine("Key {0} found at position {1}", searchItem, foundPos);
}
else
{
Console.WriteLine("Key {0} not found", searchItem);
}
}
}
public static int Search(int[] arr, int item)
{
var min = 0;
var N = arr.Length;
var max = N - 1;
int basicOperations = 0;
basicOperations++;
do
{
var mid = (min + max)/2;
if (arr[mid] == item)
return mid;
if (item < arr[mid])
max = mid - 1;
else
min = mid + 1;
basicOperations++;
} while (min <= max);
return basicOperations;
}
}
}
请让我知道,如果我做任何愚蠢的错误或我犯在上面的代码中的错误。任何帮助都会非常有帮助。
谢谢@约翰d您指出的错误:) – Dazzler
我必须承认,我没有看到它,直到我调试它! –
是的,我也没有太注意。我对此感到懊恼,现在很高兴知道答案。 – Dazzler