画图分析:
代码分析:
1 /* 2 * 查找: 3 * 基本查找:数组元素无序(从头找到尾) 4 * 二分查找(折半查找):数组元素有序 5 * 6 * 分析: 7 * A:定义最大索引,最小索引 8 * B:计算出中间索引 9 * C:拿中间索引的值和要查找的值进行比较 10 * 相等:就返回当前的中间索引 11 * 不相等: 12 * 大 左边找 13 * 小 右边找 14 * D:重新计算出中间索引 15 * 大 左边找 16 * max = mid - 1; 17 * 小 右边找 18 * min = mid + 1; 19 * E:回到B 20 */ 21 public class ArrayDemo { 22 public static void main(String[] args) { 23 //定义一个数组 24 int[] arr = {11,22,33,44,55,66,77}; 25 26 //写功能实现 27 int index = getIndex(arr, 33); 28 System.out.println("index:"+index); 29 30 //假如这个元素不存在后有什么现象呢? 31 index = getIndex(arr, 333); 32 System.out.println("index:"+index); 33 } 34 35 /* 36 * 两个明确: 37 * 返回值类型:int 38 * 参数列表:int[] arr,int value 39 */ 40 public static int getIndex(int[] arr,int value){ 41 //定义最大索引,最小索引 42 int max = arr.length -1; 43 int min = 0; 44 45 //计算出中间索引 46 int mid = (max +min)/2; 47 48 //拿中间索引的值和要查找的值进行比较 49 while(arr[mid] != value){ 50 if(arr[mid]>value){ 51 max = mid - 1; 52 }else if(arr[mid]<value){ 53 min = mid + 1; 54 } 55 56 //加入判断 57 if(min > max){ 58 return -1; 59 } 60 61 mid = (max +min)/2; 62 } 63 64 return mid; 65 } 66 }