使用二进制搜索算法在随机数中搜索数字集

本文关键字:搜索 数字 随机数 二进制 搜索算法 | 更新日期: 2023-09-27 18:12:14

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

 {
   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);
        }
    }
}

}

使用二进制搜索算法在随机数中搜索数字集

您没有对"list"进行排序。

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

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

注意,我认为你把数字里面的分区语句颠倒了。如果是x > list[middle],则需要搜索上部,而不是下部。这并不能解释或解决你的问题,首先你需要对数字进行排序。

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

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