思路:
/**
* 思路:有序表,指针:left\right
* 1. 目标数 和 arr[middle]比较
* 2. 目标数 < arr[middle],在左边数组寻找 right = middle - 1
* 3. 目标数 > arr[middle],在右边数组寻找 left = middle + 1
* 4. 重复查找,找到为止。
*/
(1) 先写个实现,后期再考虑如何优化
public class BinarySearch {
public static void main(String[] args){
int[] arr = {1,3,5,7,9,11};
int key = 9;
int position = binarySearch(arr,key,0,arr.length - 1);
if(position == -1){
System.out.println("查找的数="+key+"不再数列中");
}else{
System.out.println("查找的数="+key+",index="+position);
}
}
public static int binarySearch(int[] arr,int target,int left,int right) {
if (target < arr[left] || target > arr[right] || left > right) {
return -1;
}
int middle = (left + right) / 2; //初始中间位置
if (arr[middle] > target) {
//左边接着查找
return binarySearch(arr, target, left, middle - 1);
} else if (arr[middle] < target) {
//右边查找
return binarySearch(arr, target, middle + 1, right);
} else {//arr[middle] == target找到
return middle;
}
}
}