折半查找的条件:为已经有序的数组。
折半查找的思想:
min,max为数组的最小和最大下标
1.先取最中间的那个数(在这里声明为middle,是下标,不是值),与要查找的数进(这里声明为goal,是值)行比较,如果不相等,则进入判断;
2.如果arr[middle]比goal大,则范围缩小到0~middle-1;
3.如果arr[middle]比goal小,则范围缩小到middle+1~arr.length;
4.当min>max时,说明没有找到,则返回-1;
代码如下:
//折半查找,arr是已经排序好的数组,goal是要查找的数,返回下标 public static int search(int[] arr,int goal) { int min = 0; int max = arr.length; int middle = arr.length/2; int i=0;//记录查找次数 while(arr[middle]!=goal) { System.out.println("times:"+(++i)); if(arr[middle]>goal) { max=middle-1; } if(arr[middle]<goal) { min=middle+1; } if(min>max) { return -1; } middle=(min+max)/2; } return middle; }