/*
* 二分查找
* 核心思想,将数组分成两块
* */
public class BinarySearch {
public static void main(String[] args) {
//准备一数组
int[] arr ={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
//调用方法
int target = BinarySearch.getTarget(arr, 13);
System.out.println(target);
}
//封装静态一个方法
public static int getTarget(int[] nums,int target){
//准备两个指针,一个指向数组的起始位置,另一个指向数组末尾
int start = 0;
int end = nums.length - 1;
//找到目标值的索引
int targetIndex = 0;
//准备一个标志值
boolean flag = true;
while (start <= end){
//拿到数组中间值的下标
int middle = (start+end)/2;
//如果寻找的值恰好为中间值那么返回索引值
if (target == nums[middle]){
targetIndex = middle;
flag = false;
break;
//目标值小于中间值,说明位于前半段,将尾指针前移;
}else if (target < nums[middle]){
end = middle - 1;
//如果大于中间值,证明目标值位于后半段,将头指针后移
}else
start = middle + 1;
}
//没有找到的处理
if (flag){
System.out.println("没有找到索引值值哦");
}
//返回索引值
return targetIndex;
}
}