下面的我的代码不起作用,没有给我任何输出。当我要求用户输入一组数字并在其中查找时,它运行良好。但是,当我尝试在随机数字内搜索时,它根本不起作用。任何人都可以帮我弄明白,我做错了什么,因为程序构建成功。它只是不会给出正确的输出。
{
class program
{
public class BinarySearch
{
public static int Search(int[] list, int x, int lower, int upper)
{
if (lower == upper)
{
int middle = (lower + upper) / 2;
if (x == list[middle])
return middle;
else if (x > list[middle] )
return Search(list, x, lower, middle - 1);
else
return Search(list, x, middle + 1, upper);
}
return 0;
}
public static void Main(String[] args)
{
int key;
int index;
int low = 0;
int high = 1000;
int[] list = new int[1000];
Random RandomNumber = new Random();
for (int i = 0; i < 1000; i++)
{
list[i] = RandomNumber.Next(1, 1000);
}
foreach (int j in list)
{
Console.WriteLine("{0}", j);
}
Console.WriteLine("...................................................\n");
Console.WriteLine("\nEnter the number to be searched in the list.");
key = Convert.ToInt32(Console.ReadLine());
index = Search(list, key, low, high);
Console.WriteLine("...................................................\n");
if (index == 0)
Console.WriteLine("Key {0} not found", key);
else
Console.WriteLine("Key {0} found at index {1}", key, index);
}
}
}
}
答案 0 :(得分:1)
你没有对“清单”进行排序。
二进制搜索要求列表按照您在二进制搜索算法中使用<
和>
的相同规则进行排序,否则将无效。
因此,对数组中的数字进行排序,二元搜索应该更好。
注意,我认为你已经颠倒了数字中的分区语句。如果是x > list[middle]
,则需要搜索上半部分,而不是下半部分。仅这一点不能解释或解决您的问题,首先您需要对数字进行排序。
最后,要知道0
是数组的有效索引,这意味着您将无法区分“未找到”和“在索引0找到”与您的代码。
我的建议:找到二进制搜索的现有实现并复制,或者至少将其用作灵感来源。