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 }