2010-11-15 101 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()方法,以便测试对象是否大于,小于或等于对方。