/** * 使用递归的方式实现一个二分法查找 left right middle = (left+right)/2 * 使用二分法查找的前提是 必须是一个有序列的数组 * 在使用二分法查找的时候,因为每一次用到了在哪个范围内查找, * 所以在方法中不仅有带查找的key跟序列,还要有范围的区间 * 首先需要判断一下,左边的是否比右边小; * 求出中间的位置,拿中间的值跟key做比较,如果相等的话,直接返回下标; * 不然需要判断一下,key值有可能是在它的左区间还是右区间 * 如果在左区间就是left,middle-1 * 右区间就是middle+1,rihgt * @author root * */ public class BinarySercher { public static void main(String[] args) { int[] arr={1,2,3,4,5,6,7,9,12,14,15,16}; System.out.println(binary(arr, 4, 0, arr.length-1)); } public static int binary(int[] arr,int key,int left,int right){ if (left>right){ return -1; } int middle = (left+right)/2; if(arr[middle]==key){ return middle; }else if(arr[middle]>key){ return binary(arr, key, left, middle-1); }else { return binary(arr, key, middle , right); } } }