二分法查找
要求必须是一个有序数组,才可以进行二分法查找。二分法运用到了递归回溯的思想。
思路
1.确定中间数的坐标 mid=(left+right)/2
2.如果中间数大于查询的数,说明查询的数在左边,向左递归继续查询,此时left不变,right变为mid-1
3.如果中间数小于查询的数,说明查询的数在右边,向右递归继续查询,此时right不变,left变为mid+1
3.如果都不是,那就说明中间数就是要找的数,将下标返回,也就是返回mid
注意:结束递归有两种情况,一种是找到了数,直接返回下标,就是3;另一种是没找到,此时left>right,返回-1。
另外,在递归调用自己时,要加上return,这样保证将值正确的传回。
代码
/**
* 查找一个数
* @param arr
* @param left
* @param right
* @param value
* @return
*/
private static int binarySearch(int[] arr,int left,int right,int value){
if(left>right){
return -1;
}
int mid=(left+right)/2;
if(value>arr[mid]){
return binarySearch(arr,mid+1,right,value);
}else if(value<arr[mid]) {
return