我在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