对于数组中的键的二进制搜索,lo 或 hi 的最终值是多少?

For binary search for keys in an array, what is the final value of lo or hi?

假设整数键与排序键数组:int[] keys = {10,20,30,40,50,60,70}; 所以最初在排名 lo = 0hi = 6.

二分查找keys数组中的30,最后lo的值会不会是20,也就是1?

我只需要弄清楚逻辑。

二进制搜索将像这样开始:

lo = 0, hi = 6, mid = 3, numberInMid = 40

30 < 40hi = mid - 1 = 2

现在,
lo = 0, hi = 2, mid = 1, numberInMid = 20

30 > 20lo = mid + 1 = 2

最后,
lo = 2, hi = 2, mid = 2, numberInMid = 30

作为30 == 30,循环退出并且ans = 30 相反,如果您搜索的是 35(我取这个数字是因为它符合上述所有关系表达式),那么:
作为 35 > 30lo = mid + 1 = 3
由于 lo > hi,循环退出并且您返回默认值 ans
例如:ans = -1 如果只涉及正整数,或者相反,您甚至可以使用 flag = false,它仅在 == 表达式被命中时才切换为真。

您可以通过debug实现代码并跟踪代码以了解。

public class Test {
    public int binary_search(int[] keys, int low, int high, int mid, int target){
        if(low > high){
            return -1;
        }

        if(target < keys[mid]){
            high = mid - 1;
            mid = (low + high) / 2;
            return binary_search(keys, low, high, mid, target);
        }else if(target > keys[mid]){
            low = mid + 1;
            mid = (low + high) / 2;
            return binary_search(keys, low, high, mid, target);
        }else{
            return mid;
        }
    }

    public static void main(String args[]){
        int[] keys = {10,20,30,40,50,60,70};
        Test test = new Test();
        int mid = (0 + keys.length) / 2;
        int target = 30;
        int index = test.binary_search(keys, 0, keys.length, mid, target); 
        System.out.println(index);
    }
}