JAVA实现使用递归的二分查找
package binarySearch;
/**
* 使用递归的二分查找
* 注意原数组必须是有序的
* arr代表数组
* key代表要查找的关键字
* 返回值为关键字的索引值
* @author zc
*
*/
public class BinarySearch02 {
public static void main(String[] args) {
int[] arr= {1,2,3,4,5,6,7,8,9};
int key=1;
int index=binarySearh(arr, key);
System.out.println(index);
}
public static int binarySearh(int[] arr,int key) {
int low=0;
int high=arr.length-1;
int index=binarySearch1(arr, key, low, high);
return index;
}
//进行进一步封装,方便用户使用
public static int binarySearch1(int[] arr,int key,int low,int high) {
int mid=(low+high)/2;
if(key>arr[high]||key<arr[low]||low>high) { //三种情况任意一种满足,证明不存在
return -1;
}
if(arr[mid]>key) {
return binarySearch1(arr, key, low, mid-1); //如果中间值大于key,在左侧区域
}else if (arr[mid]<key){
return binarySearch1(arr, key, mid+1, high); //如果中间值小于key,在右侧区域
}else {
return mid; //low=high证明找到
}
}
}
JAVA实现使用非递归的二分查找
package binarySearch;
/**
* 使用非递归的二分查找
* 注意原数组必须是有序的
* arr代表数组
* key代表要查找的关键字
* 返回值为关键字的索引值
* @author zc
*
*/
public class BinarySearch01 {
public static void main(String[] args) {
int[] arr= {1,2,5,6,9};
int key=6;
int index=binarySearh(arr, key);
System.out.println(index);
}
public static int binarySearh(int[] arr,int key) {
int low=0;
int high=arr.length-1;
if(key>arr[high]||key<arr[low]||low>high) { //三种情况任意一种满足,证明不存在
return -1;
}
while(low<high) {
int mid=(low+high)/2;
if(arr[mid]<key) { //如果中间值小于key,在右侧区域
low=mid+1;
}else if(arr[mid]>key) { //如果中间值大于key,在左侧区域
high=mid-1;
}else {
return mid; //low=high证明找到
}
}
return -1;
}
}