前言
二分查找又叫折半查找,只使用有序的数组集合,每次拿中间元素和目标元素进行比较,如果大于目标元素则去中间元素左边的元素中继续查找,如果小于目标元素则取中间元素右边的元素查找。将搜索的时间复杂度从O(n)降到O(logn).
代码实现
非递归实现
/**
* -1表示未找到
* @param array
* @param target
* @return
*/
public static int binarySearch(int[] array,int target){
if (array.length == 0){
return -1;
}
int left =0;
int right = array.length-1;
while (left <= right){
int mid = (left + right)/2;
if (array[mid] == target){
return mid;
}else if (array[mid] < target){
left = mid + 1;
}else{
right = mid -1;
}
}
return -1;
}
递归实现
/**
* 递归实现
* @param array
* @param target
* @param left
* @param right
* @return
*/
public static int binarySearch2(int[] array,int target,int left,int right){
if (left <= right){
int mid = (left + right)/2;
if (array[mid] == target){
return mid;
}else if (array[mid] < target){
return binarySearch2(array,target,mid+1,right);
}else{
return binarySearch2(array,target,left,mid-1);
}
}
return -1;
}