二分查找
/** * 二分查找循环实现 * * @param key 关键字 * @param arr 有序数组 * @return 下标 */ public static int find(int key, int[] arr) { int lo = 0; int hi = arr.length - 1; while (lo <= hi) { int mid = lo + (hi - lo) / 2; if (key < arr[mid]) { hi = mid - 1; } else if (key > arr[mid]) { lo = mid + 1; } else { return arr[mid]; } } return -1; } /** * 二分查找递归实现 * * @param key keyword * @param arr 有序数组 * @param begin 开始索引 * @param end 结束索引 * @return */ public static int find(int key, int[] arr, int begin, int end) { int mid = begin + (end - begin) / 2; if (begin <= end) { if (key == arr[mid]) return mid; if (key > arr[mid]) return find(key, arr, mid + 1, end); else if (key < arr[mid]) return find(key, arr, begin, mid - 1); } return -1; }