2010-11-15 98 views
0

下面的代碼是如何我試圖創建一個遞歸二進制方法..爪哇 - 遞歸二進制搜索幫助

public static int binarySearch(Comparable[] objArray, Comparable item) 
{ 

    int lower=0; 
    int upper=objArray.length -1; 
    int i = -1; 
    int compareResult; 
    boolean found = false; 
    while ((lower<=upper) && (!found)) 
    { 
     i=(lower+upper)/2; 
     compareResult=item.compareTo(objArray[i]); 
     if(compareResult<0) 
     { 
      upper=i-1; 
     } 
     else 
      if (compareResult>0) 
      { 
       lower=i+1; 
      } 
      else 
      { 
       found=true; 
      } 


    } 
    return compareResult; 



} 

我覺得想法我沒有正確這樣做......有什麼建議?

-D

+1

錯誤,與遞歸,你在方法中調用方法本身...我沒有看到你這樣做。 – 2010-11-15 19:31:58

+0

假設你只有一個項目在你的數組中。然後lower == upper,你永遠不會進入while循環。 – 2010-11-15 19:33:38

+0

這與遞歸無關 – Falmarri 2010-11-15 19:40:24

回答

1

您正在使用循環。爲了讓你的方法是遞歸的,它需要調用它自己,直到它達到一些破壞條件。

結帳Wikipedia's example。從本質上講,你的「while」條件將會成爲打斷遞歸的條件(即停止方法調用自己),而你當前循環的內容將設置「上」和「下」參數爲下一次遞歸調用。

1

在這種情況下,二分查找的指導原則是將數組切成兩半,然後檢查可比對象是否大於或等於數組中間的對象。如果較小,則將上部設置爲小於中部(因爲它已經被選中),而下部保持不變。如果更高,則向下移動到中間再加上一個,然後上部保持不變。繼續這樣做,直到找到該對象,或者直到它失敗時,上部==較低。

如果您正在比較對象,我會編寫自己的compareTo()方法,以便測試對象是否大於,小於或等於對方。