1. 二分查找
二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。
比较 基本查找 与 二分查找 ?
(1)基本查找:数组元素无序(从头找到尾)
(2)二分查找(折半查找):数组元素有序
2. 二分查找原理
(1)思想:每次都猜中间那个元素,比较大或者小,就能减少一半的元素。
(2)原理图:
3. 二分查找的代码实现:
1 package cn.itcast_04; 2 3 /* 4 * 查找: 5 * 基本查找:数组元素无序(从头找到尾) 6 * 二分查找(折半查找):数组元素有序 7 * 8 * 分析: 9 * A:定义最大索引,最小索引 10 * B:计算出中间索引 11 * C:拿中间索引的值和要查找的值进行比较 12 * 相等:就返回当前的中间索引 13 * 不相等: 14 * 大 左边找 15 * 小 右边找 16 * D:重新计算出中间索引 17 * 大 左边找 18 * max = mid - 1; 19 * 小 右边找 20 * min = mid + 1; 21 * E:回到B 22 */ 23 public class ArrayDemo { 24 public static void main(String[] args) { 25 //定义一个数组 26 int[] arr = {11,22,33,44,55,66,77}; 27 28 //写功能实现 29 int index = getIndex(arr, 33); 30 System.out.println("index:"+index); 31 32 //假如这个元素不存在后有什么现象呢? 33 index = getIndex(arr, 333); 34 System.out.println("index:"+index); 35 } 36 37 /* 38 * 两个明确: 39 * 返回值类型:int 40 * 参数列表:int[] arr,int value 41 */ 42 public static int getIndex(int[] arr,int value){ 43 //定义最大索引,最小索引 44 int max = arr.length -1; 45 int min = 0; 46 47 //计算出中间索引 48 int mid = (max +min)/2; 49 50 //拿中间索引的值和要查找的值进行比较 51 while(arr[mid] != value){ 52 if(arr[mid]>value){ 53 max = mid - 1; 54 }else if(arr[mid]<value){ 55 min = mid + 1; 56 } 57 58 //加入判断 59 if(min > max){ 60 return -1; 61 } 62 63 mid = (max +min)/2; 64 } 65 66 return mid; 67 } 68 }
运行效果,如下: