Java基础知识强化60:经典查找之二分查找

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 }

 运行效果,如下:

原文地址:https://www.cnblogs.com/hebao0514/p/4835523.html