Binarysearch算法代码问题

时间:2015-11-01 21:30:37

标签: java algorithm binary-search

所以我在这段代码中一直在寻找我的错误10-20分钟,但我仍然找不到任何错误。然而,我发现(在最后添加一个systemout之后)我的“中间”整数有些错误,因为它是<比最低数字(开始)

感谢任何帮助!

以下是代码:

public class BinaereSuche {

public static int intList[] = {1, 2, 4, 8, 16, 32, 64, 128, 256, 512};


public static int bineareSuche(int number){
    int start = 0;
    int end = intList.length -1;
    boolean found = false;

    while(found == false){ 
        int middle = (end - start) / 2; 

        if(number > intList[middle]){ 
            start = middle + 1;
        }else if(number < intList[middle]){ 
            end = middle - 1;
        }else
            return middle;
        found = true;
        System.out.println(intList[start] + " <--> " + intList[end] + " => " + intList[middle]);
    } return -1;
}

public static void main(String[] args) {
    System.out.println(bineareSuche(32));
  }
}

sysout给我32 <--> 512 => 16 -1,其中32是起始编号,512是结束编号,16是512和32之间的中间编号,这显然是错误的。

P.S。我一直在寻找答案,但仍然无法找到我的问题 - 如果有人对它的工作方式感到好奇(如果你还不知道):Here's a picture

1 个答案:

答案 0 :(得分:1)

我认为这一行是错误的:

flex 1 0 auto

尝试:

int middle = (end - start) / 2; 

考虑end = 10,start = 9.您的方法将计算mid = 0。