二分查找(递归与非递归方式)

来源:互联网 发布:红警全图作弊器软件 编辑:程序博客网 时间:2024/05/20 09:47
@Testpublic void testBinarySearch() {int[] arr = { 1, 2, 3, 4, 5 };// 非递归实现,返回对应的序号System.out.println(BinarySearch(arr, 5));// 递归实现,返回对应的序号System.out.println(BinSearch(arr, 5));}/** * 非递归实现,返回对应的序号 *  * @author: kpchen * @createTime: 2015年1月6日 下午8:21:55 * @history: * @param arr *            数组 * @param key *            查找数 * @return int 返回位置 */int BinarySearch(int[] arr, int key) {if (arr == null || arr.length < 1) {return -1;}int low = 0;int high = arr.length - 1;while (low <= high) {int mid = (low + high) / 2;if (key == arr[mid]) {return mid;} else if (key < arr[mid]) {high = mid - 1;} else {low = mid + 1;}}return -1;}/* * 递归实现,返回对应的序号 */int BSearch(int[] arr, int low, int high, int key) {if (arr == null || low > high) {return -1;}int mid = (low + high) >> 1;if (arr[mid] == key) {return mid;} else if (arr[mid] > key) {return BSearch(arr, low, mid - 1, key);} else {return BSearch(arr, mid + 1, high, key);}}/* * 将递归实现的方法封装起来 */int BinSearch(int[] arr, int key) {return BSearch(arr, 0, arr.length - 1, key);}

0 0