循环实现:
/**
* 循环实现二分法
* @param srcArray 有序数组
* @param key 查找元素
* @return 不存在返回-1
*/
private static int binSearch1(int srcArray[],int key){
int mid;
int start = 0;
int end = srcArray.length - 1;
while (start <= end){
mid = (end - start) / 2 +start;
if (key < srcArray[mid]){
end = mid - 1;
}else if (key > srcArray[mid]){
start = mid + 1;
}else {
return mid;
}
}
return -1;
}
递归实现:
/**
* 递归实现二分法
* @param srcArray 有序数组
* @param key 查找元素
* @param start 数组低地址下标
* @param end 数组高地址下标
* @return 不存在返回-1
*/
public static int binSearch2(int[] srcArray,int key,int start,int end){
int mid = (end - start) / 2 +start;
if (srcArray[mid] == key){
return mid;
}
if(start >= end){
return -1;
}else if (key < srcArray[mid]){
return binSearch2(srcArray,key,start,mid - 1);
}else if (key > srcArray[mid]){
return binSearch2(srcArray,key,mid + 1,end);
}
return -1;
}
然后在main方法中new一个数组
分别调用两个方法实现二分法
//分别运用循环和递归实现二分法
public static void main(String[] args) {
int[] srcArray = {1,2,3,4,5,6,7,8,9};
//循环方法实现二分法
System.out.println(binSearch1(srcArray,6));
//递归方法实现二分法
System.out.println(binSearch2(srcArray,7,0,8));
}