【发布时间】:2023-03-11 14:24:01
【问题描述】:
我在 C# 的控制台窗口应用程序中实现了二进制搜索算法。我正在为数组生成随机值并分别使用Random() 和Array.Sort() 函数对它们进行排序。
问题 - 无论我给出什么 Key(要在数组中搜索的项目),程序都会返回 Key not found 使用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;
}
}
}
如果我在上面的代码中犯了任何愚蠢的错误或犯了错误,请告诉我。任何帮助都会非常有帮助。
【问题讨论】:
标签: c# .net arrays algorithm random