package cn.StringBuffer;
/*二分查找
* 前提:数组必须是有序的
* 思想:每次猜中间的那个元素,比较大或者小,就能减少一半的元素
*
* 思路:
* 定义最小的索引,最大索引
* 计算出中间的索引
* 拿中间的索引的值和要查找的元素进行比较
* 相等:就直接返回当前的中间索引
* 不相等:
* 大了: 在左边找 max = mid - 1;
* 小了:在右边找 min = mid + 1;
* 重新获取最小索引或者最大索引
* 大了 在左边找
* 小了 在右边找
*
* 回到第二步
*
* */
public class ErFenSearch {
public static void main(String[] args) {
int[] arr = { 22, 33, 55, 66, 77, 88, 99, 111 };
int index = getIndex(arr, 99);
System.out.println("索引是:" + index);
}
public static int getIndex(int[] arr, int value) {
int max = arr.length - 1;
int min = 0;
int mid = (max + min) / 2;
while (arr[mid] != value) {
if (arr[mid] > value) {
max = mid - 1;
} else {
min = mid + 1;
}
if (min > max) {
return -1;
}
mid = (max + min) / 2;
}
return mid;
}
}