第一种方法通过递归来实现改变,利用判断条件和mid修改start和end
第二种方法是通过普通循环来实现,利用一个while来进行判断,通过mid修改start和end
总而言之 :数组的长度-1和0除以2就是第一个mid 然后改变start和end最后不断的按照原来的大于小于逻辑缩减范围就能取到该值或者返回-1 没有这个值
package com.bj58.finance.blp.task.config; public class A { public static void main(String[] args) { int srcArray[] = {3,5,11,17,21,23,28,30,32,50,64,78,81,95,101}; System.out.println(binSearch(srcArray, 0, srcArray.length - 1, 95)); } // 二分查找递归实现 public static int binSearch(int srcArray[],int start,int end,int key){ int mid=(end-start)/2+start; if(srcArray[mid]==key){ return mid; }if(start>=end){ return -1; }else if(key>srcArray[mid]){ return binSearch(srcArray,mid+1,end,key); }else if (key<srcArray[mid]){ return binSearch(srcArray,start,mid-1,key); } return -1; } // 二分查找普通循环实现 public static int binSearch(int srcArray[],int key){ int mid=srcArray.length/2; if(key==srcArray[mid]){ return mid; } int start=0; int end=srcArray.length-1; while (start<=end){ mid = (end -start)/2+start; if(key<srcArray[mid]){ end=mid-1; }if(key>srcArray[mid]){ start=mid+1; }else { return mid; } } return -1; } }