二分法的思想 (1)确定该区间的中间位置K (2)将查找的值T与array[k]比较。若相等,查找成功返回此位置;否则确定新的查找区域,继续二分查找。区域确定如下:array[k]>T 由数组的有序性可知array[k,k+1,……,high]>T;故新的区间为array[low,……,K-1]b.array[k]<T 类似上面查找区间为array[k+1,……,high]。每一次查找与中间值比较,可以确定是否查找成功,不成功当前查找区间将缩小一半,递归查找即可。时间复杂度为:O(log2n)。 注意:二分法适用的数据必须是有序的。 代码实现
public class BinarySearch { public static void main(String[] args) { //注意 二分法的数据必须是有序的 int []arr = {1,5,8,9,12,16,22,26,28,30}; int resIndex = binarySearch(arr,0,arr.length-1,30); System.out.println("resIndex = " + resIndex); } //二分查找法 public static int binarySearch(int [] arr,int left,int right,int findVal){ //当left大于right时,说明递归整个数组,但是没有找到 if(left > right){ return -1; } int mid = (left + right)/2; int midVal = arr[mid]; if(findVal > midVal){ //向右递归 return binarySearch(arr,mid+1,right,findVal); }else if(findVal < midVal){ return binarySearch(arr,left,mid+1,findVal); }else{ return mid; } } }