2014-07-08 48 views
0

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

{ 
    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处找到”您的代码。

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

+0

当我对数字进行排序时,它确实工作得更好。谢谢。 – Armado

+0

当然,它确实,二分搜索算法的整个概念围绕输入元素排序的知识。 –