二分查找法,又称折半查找法,其算法思想是:
在有序的序列,每次都是以序列的中间位置的数来与待查找的关键字进行比较,每次缩小一半的查找范围,直到匹配成功。值得注意的是,数组必须是有序的,如果是无序数组二分查找法就会出错,这也算是二分查找法的缺点之一。
public class Test001 {
public static Integer count = 0;
public static void main(String[] args) throws Exception {
int[] arr = new int[]{1,4,6,8,9,20};
int key = 8;
//while循环实现二分查找法
int findIndex = commonBinarySearch(arr, key);
System.out.println(findIndex);
//递归实现二分查找法
int findIndex2 = recursionCommonBinarySearch(arr,key,0,arr.length-1);
System.out.println(findIndex2);
}
/**while循环实现二分查找法
* @param arr 有序数组
* @param key 待查找关键字
* @return
*/
public static int commonBinarySearch(int[] arr,int key){
int low = 0;
int hight = arr.length-1;
int mid = 0;
while(low<=hight){
mid = (low+hight)/2;
if(key>arr[mid]){//key在arr[mid]的右边
low = mid+1;
}else if(key<arr[mid]){//key在arr[mid]的左边
hight = mid-1;
}else{//key == arr[mid]
return mid;
}
}
return -1;
}
/**递归实现二分查找法
* @param arr 有序数组
* @param key 待查找关键字
* @param low 查找起点下标
* @param hight 查找终点下标
* @return
*/
public static int recursionCommonBinarySearch(int[] arr,int key,int low,int hight){
if(key<arr[low] || key>arr[hight] || low>hight){
return -1;
}else{
int mid = (low+hight)/2;
if(key>arr[mid]){
return recursionCommonBinarySearch(arr,key,mid+1,hight);
}else if(key<arr[mid]){
return recursionCommonBinarySearch(arr,key,low,mid-1);
}else{
return mid;
}
}
}
}
本文深入解析了二分查找法的算法思想,介绍了在有序序列中如何通过不断缩小查找范围来定位目标元素,同时提供了使用while循环和递归两种方式实现的代码示例。

2281

被折叠的 条评论
为什么被折叠?



