2014-07-08 43 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

當然,它確實,二分搜索算法的整個概念圍繞輸入元素排序的知識。 –