这里用递归和非递归的方式实现了二分搜索:
PS:二分搜索是对已经排序完成的数组进行搜索定位,我这里是以升序排列为例,可用归并排序等算法进行排序(可见我其他博文)
/**
* 二分搜索算法,通过比较顺序列表中间元素的值,迅速缩小规模查找元素,
* 时间复杂度为:O(n) = logn
*/
public class BinarySearch {
/**
* 二分搜索算法,传入一个排好序的数组和需要查找的元素,若存在,返回它的其中一个索引
* @param array
* @param element
* @return
*/
public static int BinarySearch(int[] array,int element,int left, int right){
int mid = (right + left) >> 1;
if (array[mid] == element) {
return mid;
}else{
if (right - left > 1){
if (array[mid] > element){
return BinarySearch(array,element,left,mid - 1);
}else {
return BinarySearch(array, element, mid + 1, right);
}
}else
return -1;
}
}
/**
* 非递归实现
* @param array
* @param element
* @return
*/
public static int BinarySearch1(int[] array, int element){
if (array == null || array.length == 0){
return -1;
}
int right = array.length - 1;
int left = 0;
int mid = (right + left) / 2;
while (right >= left){
if (array[mid] == element){
return mid;
}else if (array[mid] < element){
left = mid;
mid = (right + mid) / 2;
}else if (array[mid] > element){
right = mid - 1;
mid = (right - left) / 2;
}
}
return -1;
}
}