问题:有一个升序排列无重复数字的数据,以及一个数字,利用二分法查找数字在数组中的位置,找到则返回其位置号,没找到返回-1.
解答:
通过两种方式实现:第一种方式为递归实现,需要传递数组的头和尾的位置。
public class MidFind {
/**
*
* @param arr
* @param key
* @param startNum 数组位置号,为数组下标+1
* @param endNum 数组位置号,为数组下标+1
* @return
*/
public static int getLocation(int[] arr,int key,int startNum,int endNum) {
if (arr==null) return -1;
int middleNum=(startNum+endNum)/2;
System.out.println("中间值:"+middleNum);
if (startNum<endNum) {
if (key==arr[middleNum]) {
return middleNum+1;
} else if (key<arr[middleNum]) {
return getLocation(arr,key,startNum,middleNum);
} else {
return getLocation(arr,key,middleNum,endNum);
}
} else if (startNum==endNum) {
return startNum;
} else {
return -1;
}
}