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; } }
原文:http://www.cnblogs.com/Deleting/p/5068698.html