数组元素的查找——二分法查找
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 }