二分查找(Binary Search)应用于查找有序序列中的的特定元素。
基本思想是:
- 将查找的值与查找区间的中间元素进行对比
- 如果小于中间元素,那么查找区间可以重新确定为在中间元素之前;
- 如果大于中间元素,那么查找区间可以重新确定为在中间元素之后;
然后重新在新的区间内进行查找。
终止条件是,区间长度缩小为0 或者 找到所需元素
二分查找的循环实现
// no duplicate number
public int binarySearch(int[] arr, int value){
int low = 0;
int high = arr.length-1;
while(low <= high) {
//calculate mid point
int mid = (low + high)/2;
if(arr[mid] == value) {
return mid;
}else if(arr[mid] < value) {
low = mid + 1;
}else {
high = mid - 1;
}
}
return null;
}
二分查找的递归实现
public int recursionBinarySearch(int[] arr, int value, int low, int high){
if(low > high) {
return null;
}
//calculate mid point
int mid = (low + high) / 2;
if(arr[mid] == value) {
return mid;
}
if(arr[mid] < value) {
return recursionBinarySearch(arr, value, mid+1, high);
}else {
return recursionBinarySearch(arr, value, low, mid-1);
}
}