关于二分法:
使用二分法查找的前提是该数组是有序的
二分答案,就是用二分的方法,在可能的答案区间里找出问题的答案,大多数情况下用于求解满足某种条件下的最大(小)值,前提是答案具有单调性,同时也可以理解为是一种倒推方法(先找答案在判断答案是否可行、有没有更优解)。
package syy;
public class ErFenChaZhao {
public static void main(String[] args) {
//使用二分查找的前提是该数组是有序的
int arr[]= {1,8,10,89,1000,1000,1000,1234};
int resIndex=binarySeach(arr,0,arr.length-1,1000);
System.out.println("resIndex"+resIndex);
}
public static int binarySeach(int[] arr,int left, int right, int findVal) {
//当left>right时,说明递归整个数组,但是没有找到
if(left>right) {
return -1;
}
int mid=(left+right)/2;
int midVal=arr[mid];
if(findVal>midVal) {//向右递归
return binarySeach(arr,mid+1,right,findVal);
}else if(findVal<midVal) {//向左递归
return binarySeach(arr,mid-1,left,findVal);
}else {
return mid;
}
}
}