java面试题 -- 二分查找

算法描述:

1.前提:已排序的长度为n的数组A(假设已存在)
2.定义左边界low = 0,右边界high = n - 1,确定查找的范围。循环执行3,4步骤
3.获取中间索引 mid=(low + high)/ 2
4.比较中间索引的值 A[mid] 与待查找元素 t
   ① 若A[mid] == t ,则返回索引

   ② 若 A[mid] < t,表示 A[mid] 左侧的值都小于t ,则左边元素无需比较,到 A[mid] 右侧去找。即 low = mid + 1,high不变。

   ③ 若A[mid] > t,表示 A[mid] 右侧的值都大于t ,则右边元素无需比较,到 A[mid] 左侧去找。即 high = mid -1,low不变。

5.若low > high,表示没有找到,退出循环

示例代码:

public static int binarySearch(int[] a, int t) {
        int low = 0 , high = a.length , mid;
        while (low <= high){
            mid = (low + high) / 2;
            if (a[mid] == t){
                return mid;
            }else if (a[mid] < t){
                low = mid + 1;
            }else if (a[mid] > t){
                high = mid - 1;
            }
        }
        return -1;
    }

 

posted @ 2022-04-08 19:31  yxhhhhhh  阅读(50)  评论(0)    收藏  举报