由二分查找实现,实现复杂度为O(log n):
/**
* 查找有序数组指定数字位置。
* @param a 输入数组
* @param n 查找数字
* @param low 数组左边界
* @param high 数组右边界
* @return
*/
private static int getLocation(int[] a, int n, int low, int high){
if(n >= a[0] && n <= a[a.length - 1]){
int mid = (high + low)/2;
//判断输入参数
if(low > high){
return -1;
}
//递归进行二分查找
if(n < a[mid]){
return getLocation(a, n, low, mid-1);
}else if(a[mid] > n){
return getLocation(a, n, mid+1, high);
}else{
return mid;
}
}else{
throw new RuntimeException("所查询数字不在所属数组内!");
}
}
ps:如果有什么错误的地方欢迎指正。
网友评论