手写 二分查找两种方法:
小铃铛 2019.10.14 如果没有Eclipse,让你手写呢!
//这种方法用的是递归实现(第一种方法)
public class BinarySearch {
//key 需要查找的关键字
private static int binnarySearch(int [] arr,int key,int low,int high){
if(key<arr[low]||key>arr[high]||low>high){
return -1;
}
int middle=(low+high)/2;
if(arr[middle]>key){
//在关键字左侧
return binnarySearch(arr, key, low, middle-1);
}else if(arr[middle]<key){
//在关键字右侧
return binnarySearch(arr, key, middle+1, high);
}else{
return middle;
}
}
//第二种方法是遍历(简单粗暴),好掌握!
private static int binnarySearch1(int [] arr,int key){
int low=0; //最左边下标
int high=arr.length-1; //最右边下标
if(key < arr[low] || key > arr[high] || low > high){
return -1;
}
while(low<=high){
int middle=(low+high)/2;
if(arr[middle]>key){
//比关键字大那么关键字在左侧
high=middle-1;
}else if(arr[middle]<key){
//比关键字小那么关键字在右侧
low=middle-1;
}else{
return middle;
}
}
return -1;
}
//测试代码Test
public static void main(String[] args) {
//第一种方法测试
// int [] array={1,2,3,4,5,6,7,8,9};
// int a=binnarySearch(array, 5, 0, array.length-1);
// System.out.println("第一种方法这个数的下标是:"+a);
//第二种方法测试
int [] array={1,2,3,4,5,6,7,8,9};
int a=binnarySearch1(array, 5);
System.out.println("第二种方法这个数的下标是:"+a);
}
}