Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用二进制搜索算法搜索随机数中的数集_C# - Fatal编程技术网

C# 用二进制搜索算法搜索随机数中的数集

C# 用二进制搜索算法搜索随机数中的数集,c#,C#,我下面的代码不工作,没有给我任何输出。当我要求用户输入一组数字并在其中查找时,它工作得很好。但当我尝试在随机数内搜索时,它根本不起作用。谁能帮我弄清楚,我做错了什么,因为程序构建成功了。它只是不能给出正确的输出 { class program { public class BinarySearch { public static int Search(int[] list, int x, int lower, int upper) {

我下面的代码不工作,没有给我任何输出。当我要求用户输入一组数字并在其中查找时,它工作得很好。但当我尝试在随机数内搜索时,它根本不起作用。谁能帮我弄清楚,我做错了什么,因为程序构建成功了。它只是不能给出正确的输出

 {
   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);
        }
    }
}
{
班级计划
{
公共类二进制搜索
{
公共静态整型搜索(整型[]列表,整型x,整型下限,整型上限)
{
如果(下==上)
{
中间整数=(下+上)/2;
如果(x==列表[中间])
返回中间;
如果(x>列表[中间])
返回搜索(列表、x、下、中-1);
其他的
返回搜索(列表,x,中间+1,上部);
}
返回0;
}
公共静态void Main(字符串[]args)
{
int键;
整数指数;
int低=0;
int高=1000;
int[]列表=新int[1000];
随机数=新随机数();
对于(int i=0;i<1000;i++)
{
list[i]=RandomNumber.Next(11000);
}
foreach(列表中的int j)
{
Console.WriteLine(“{0}”,j);
}
控制台写入线(…………\n”);
Console.WriteLine(“\n在列表中输入要搜索的号码。”);
key=Convert.ToInt32(Console.ReadLine());
索引=搜索(列表、键、低、高);
控制台写入线(…………\n”);
如果(索引==0)
WriteLine(“找不到键{0}”,键);
其他的
WriteLine(“在索引{1}处找到的键{0}”,键,索引);
}
}
}
}您没有对“列表”进行排序

二进制搜索要求列表按照二进制搜索算法中使用的相同规则进行排序,否则它将不起作用

因此,对数组中的数字进行排序,二进制搜索应该会更好

注意,我认为您已经反转了数字中的分区语句。如果
x>列出[中间]
,则需要搜索上部,而不是下部。但是,这本身并不能解释或解决您的问题,首先您需要对数字进行排序

最后,要知道
0
是数组中的有效索引,这意味着您无法用代码区分“未找到”和“在索引0处找到”


我的建议是:找到一个现有的二进制搜索实现并复制它,或者至少将其用作灵感来源。

二进制搜索模仿人类搜索词汇的方式。尝试搜索未排序的;)当我对数字进行排序时,它确实工作得更好。谢谢。当然,二进制搜索算法的整个概念都围绕着输入元素被排序的知识。