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; }

浙公网安备 33010602011771号