/**
* 二分查找又称折半查找,它是一种效率较高的查找方法。
* 【二分查找要求】:
* 1.必须采用顺序存储结构
* 2.必须按关键字大小有序排列。
*/
public class SearchUtils {
/**
* 二分搜索:在整个数组中查找元素
* @param srcArray 原数组
* @param des 查找目标
* @return 返回元素所在索引,如果没查到,则返回-1
*/
public static int binarySearch(int[] srcArray,int des){
int high = srcArray.length - 1;
int low = 0;
while (low <= high){
int middle = (low + high) / 2;
if(des == srcArray[middle]){
return middle;
}else if(des < srcArray[middle]){
high = middle - 1;
}else{
low = middle + 1;
}
}
return -1;
}
/**
* 二分查找:在一定范围中查找元素
* @param srcArray 原数组
* @param des 查找目标
* @param beginIndex 开始索引
* @param endIndex 结束索引
* @return 返回元素所在索引,如果没查到,则返回-1
*/
public static int binarySearch(int[] srcArray,int des,int beginIndex,int endIndex){
int middle = (beginIndex + endIndex) / 2;
if(des < srcArray[beginIndex] || des > srcArray[endIndex] || beginIndex > endIndex){
return -1;
}
if(des < srcArray[middle]){
return binarySearch(srcArray,des,beginIndex,middle-1);
}else if(des > srcArray[middle]){
return binarySearch(srcArray,des,middle+1,endIndex);
}else{
return middle;
}
}
/**
* 测试
* @param args
*/
public static void main(String[] args) {
int[] src = new int[] {1, 3, 5, 7, 8, 9};
System.out.println(binarySearch(src, 3));
System.out.println(binarySearch(src,3,0,src.length-1));
}
}
java 实现二分查找法
最新推荐文章于 2023-12-25 22:38:53 发布