二分法查找,在一个按序排列的数组中,给定一个数,从该数组中查找对应的下标
对应有序数轴,开始到结束类似于左闭右闭区间取中间值,计算后比较中间值是否和给定的数一致
- 如果一致,返回
- 如果不一致,判断计算后的下标获取数组中对应的值与给定的数比较大小再跟左侧或者右侧区间比较,设置对应的开始与终止的下标,递归执行
- 如果没找到,终止循环,返回-1
import java.util.Arrays;
import java.util.List;
public class Test {
public static void main(String[] args) {
List<Integer> list = null;
list = Arrays.asList(1,2,3);
list = Arrays.asList(1,2,3,4,5,6,7,8,9);
System.out.println(binarySearch(list, 6));;
}
public static int binarySearch(List<Integer> list, int no) {
/**
* 二分法查找,在一个按序排列的数组中
*
* 给定一个数,从该数组中查找对应的下标
*
* 有序数组数轴,开始到结束类似于左闭右闭区间取中间值,计算后比较中间值是否和给定的数一致
*
* 如果一致,返回
*
* 如果不一致,判断计算后的下标获取数组中对应的值与给定的数比较大小再跟左侧或者右侧区间比较,设置对应的开始与终止的下标,递归执行
*
* 如果没找到,终止循环,返回-1
*
*/
int index = -1;
int low = 0;
int high = list.size() - 1;
while (low <= high) {
int midVal = (low + high) >>> 1;
int value = list.get(midVal).intValue();
// 中间值与给定的值相等
if (value == no) {
index = midVal;
return index;
} else if (value < no) {// 中间值小于给定的值
low = midVal + 1;
}
else if (value > no) {// 中间值大于给定的值
high = midVal - 1;
}
}
return index;
}
}