1.前提 :有已排序数组A
2.定义左边界L、右边界R,确定搜索范围,循环执行二分查找
3.获取中间索引 M = (L+R)/2
4.中间缩印得值A[M]与待搜索的值T进行比较
A[M] == T 表示找到,返回中间索引
A[M] > T,中间值右侧得其他元素都大于T,无需比较,中间索引左边去找,M -1设为右边界,重新查找.
A[M] < T,中间值左侧得元素比其他元素小于T,无需比较,中间索引右边去找,M+1设置为左边界,重新查找。
5.当L > R时,表示没有找到,应结束循环
附上代码
public static void main(String[] args) {
int [] array = {1,4,6,11,22,31,36,42,46,47,71,91};
int target = 46;
int idx = binarySerch(array,target);
System.out.println(idx);
}
private static int binarySerch(int[] a, int t) {
int l = 0 , r = a.length - 1,m;
while (l <= r){
m = (l + r)>>>1;
if (a[m] == t){
return m;
}else if (a[m] > t){
r = m-1;
}else{
l = m+1;
}
}
return -1;
}