数组元素的查找——二分法查找

 1 /*
 2  * 二分法查找算法是基于排序的基础之上(类库中好像有)
 3  * 利用二分法对数组元素进程查找111(下标为0), 222, 333, 444, 555, 666, 777, 888
 4  * 查找原理
 5  *     找666这个元素的下标,此元素下标是5.
 6  *     数组元素的下标为0——7
 7  *     通过二分法查找(0+7)/2-->中间元素下标:3
 8  *     拿着这个元素和目标元素对比:
 9  *         中间元素是:arr[3]-->444
10  *         444 < 666
11  *         被查找的元素666在目前中间元素444的右边。
12  *         所以开始元素的下标从0变成3 + 1 = 4
13  *     再重新计算一个中间元素的下标:
14  *         开始下标是:4 + 1 = 5
15  *         结束下标是:7
16  *         (5 + 7)/ 2 --> 6
17  *         中间元素是:arr[6]-->777
18  *         777 > 666
19  */
20 public class ErFen {
21     public static void main(String[] args) {
22         int[] arr = { 111, 222, 333, 444, 555, 666, 777, 888 };
23         int index = erFen(arr, 666);
24         System.out.println(index == -1 ? "这个数不存在!" : "这个数的下标为:" + index);
25     }
26 
27     private static int erFen(int[] arr, int i) {
28         // 开始元素下标
29         int begen = 0;
30         // 结尾元素下标
31         int end = arr.length - 1;
32         while (begen <= end) {
33             int mid = (begen + end) / 2;// 中间元素下标
34             if (arr[mid] == i) {
35                 return mid;
36             } else if (arr[mid] < i) {
37                 begen = mid + 1;
38             } else {
39                 end = mid - 1;
40             }
41         }
42         return -1;
43     }
44 
45 }

猜你喜欢

转载自www.cnblogs.com/HeSC980513/p/12951666.html