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

时间:2014-07-08 19:54:33

标签: c#

下面的我的代码不起作用,没有给我任何输出。当我要求用户输入一组数字并在其中查找时,它运行良好。但是,当我尝试在随机数字内搜索时,它根本不起作用。任何人都可以帮我弄明白,我做错了什么,因为程序构建成功。它只是不会给出正确的输出。

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

}

1 个答案:

答案 0 :(得分:1)

你没有对“清单”进行排序。

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

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

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

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

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