适用场景:数组中存储的值是有序排列存储的
达到目标:传入指定数查找在数组当中的下标:找到返回下标,未找到返回-1
public class Test2 {
public static void main(String[] args) {
//二分查找
int[] arr = new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9};
//目标元素
int target = 10;
//记录开始位置
int begin = 0;
//记录结束位置
int end = arr.length - 1;
//记录中间的位置
int mid = (begin + end) / 2;
//记录目标位置
int index = -1;
//循环查找
while (true) {
//判断中间的这个元素是不是要查找的元素
if (arr[mid] == target) {
//找到了直接返回
index = mid;
break;
//中间这个元素不是要查找的元素
} else {
//如果开始在结束位置之后或重合,没有这个元素
if(begin == end){
index = -1;
break;
}
//判断中间这个元素是不是比目标元素大
if (arr[mid] > target) {
//中间的这个元素比目标元素大
//说明肯定在数组中间的左半部分,因为是大于所以需要修改结束位置-1
end = mid - 1;
} else {
//中间的这个元素比目标元素小
//说明肯定在数组中间的右半部分,因为是小于所以需要修改起始位置+1
begin = mid + 1;
}
//取出新的中间位置
mid = (begin + end) / 2;
}
}
System.out.println("index:" + index);
}
}



