* @param arr 一个数组
* @param a 要查找的整数
* @return 返回查找到的数组下标,没找到则返回"-1"
*/
public int find(int [] arr,int a){
//先将数组排序
Arrays.sort(arr);
//定义开始下标,结束下标
int begin = 0;
int end = arr.length-1;
while(begin<=end){
//定义中间下标
int middle = (begin + end)/2;
if(a ==arr[middle]){
return middle;
}else if(a>middle){
begin = middle+1;
}else{
end = middle -1;
}
}
return -1;
}
/*
* 利用递归实现二分查找:
* @param arr 一个数组(该数组已经按从小到大排了序)
* @param a 要查找的整数
* @param beginIndex 数组中查找开始的下标(要在数组下标的范围之内)
* @param endIndex 数组中查找结束的下标 (要在数组下标的范围之内)
* @return 返回查找整数在数组中的位置,没有则返回-1
*/
public int halfFindByRecursion(int [] arr,int a,int beginIndex,int endIndex){
if(beginIndex>arr.length||endIndex>arr.length|beginIndex>endIndex){
throw new RuntimeException("数组下标越界");
}
if(a<arr[beginIndex]||a>arr[endIndex]){
return -1;
}
int middle = (beginIndex+endIndex)/2;
if(a==arr[middle]){
return middle;
}else if(a>arr[middle]){
//继续调用自身方法进行递归
return halfFindByRecursion(arr,a,middle+1,endIndex);
}else{
//继续调用自身方法进行递归
return halfFindByRecursion(arr,a,beginIndex,middle-1);
}
}
待续.......