实现二进制搜索的问题

时间:2014-09-13 11:21:55

标签: java

我感觉非常愚蠢,因为我解决了比这更难的事情。 这应该是有序二进制搜索的实现。每当我跟踪12时,都会弹出stackoverflow错误。有什么帮助吗?

public class binarySearch {        
    public static void main(String[] args) {
        int[] arr = { 1, 5, 6, 8, 12, 88 };
        System.out.println(binaryHelper(0, arr.length - 1, 12, arr));
    }

    public static int binaryHelper(int first, int last, int target, int[] arr) {
        if(first > last) return -1;
        else {
            int mid = first + last / 2;
            if(arr[mid] == target) return mid;
            else if(arr[mid] > target) return binaryHelper(first, mid - 1, target, arr);
            else return binaryHelper(mid + 1, last, target, arr);
        }
    }
}

2 个答案:

答案 0 :(得分:2)

这是由于mid变量计算中operators的优先顺序。它应该计算为:

int mid = (first + last) / 2;

而不是

int mid = first+last/2;

答案 1 :(得分:1)

错误在这里:

 int mid = first+last/2;

这意味着mid等于第一个+最后一个被2分割,这是错误的

所以它应该像

int mid = (first+last)/2;