面试中被问到二分查找算法,一脸懵逼,没用过啊。回来看看。
题目:一个有序数组,查找值X,返回第一次出现该值的位置
思路:用递归与分治算法实现。(分堆查)
/**
* 递归实现 二分查找算法 返回第一次出现该值的位置
* @param arr 有序数组
* @param from 起始位置
* @param to 截止位置
* @param target 搜索值
* @return
*/
public static int bSearch(long[] arr,int from,int to, int target){
int result = -1;
//中间值
int mid = (from+to)>>>1;
System.out.println(from +"==" +to+"==="+mid);
//1,如果查不到返回-1
if(from>to)
return result;
//2,如果有值,返回下标 递归方法出口
if(arr[mid]==target){
result = mid;
System.out.print("zhi="+arr[mid]);
}else if(arr[mid]>target){
//3,如果中间值大于查询的值,递归调用向前查
result = bSearch(arr,from,mid-1,target);
}else{
//3,如果中间值小于查询的值,递归调用向后查
result = bSearch(arr,mid+1,to,target);
}
return result;
}
long[] arr = new long[100];
for(int i=0;i<100;i++){
arr[i] = Math.round(Math.random()*100);
}
Arrays.sort(arr);
System.out.println("index"+bSearch(arr,0,99,24)+" ");