/**
* 递归二分查找: 找单个元素在排好序的数组中的位置,没有则返回-1;
* 核心思想:
* 1.迭代与中间位置元素比较,最终找到位置并返回
* @param elem
* @param array
* @param low
* @param high
* @return
*/
public int binarySearch(int elem, int [] array,int low, int high) {
if(low>high) {
return -1;
}
int middle = (low+high)/2;
if(array[middle] == elem) {
return middle;
}
if(array[middle]<elem) {
//找右边
return binarySearch(elem,array,middle+1,high);
}
if(array[middle]>elem) {
//找左边
return binarySearch(elem,array,low,middle-1);
}
return -1;
}
/**
* while(low<high){
* 通过比较来改变low和high的值
* }
* @param array
* @param elem
* @return
*/
public int directBinarySearch(int [] array,int elem) {
int low = 0;
int high = array.length-1;
while(low<high) {
int middle = (low+high)/2;
if(elem>array[middle]) {
low =middle+1;
}else if(elem<array[middle]) {
high = middle-1;
}else {
System.out.println("元素"+elem+"对应的下标为"+middle);
return middle;
}
}
return -1;
}
二分查找法
最新推荐文章于 2023-12-01 13:49:20 发布