java之二分查找算法实现
2016-12-01 10:51
232 查看
/** * ">>" 右边移出去的部分扔掉不要,左边空出来的部分用原来的数字填充(这就是所谓的带符号右移) * ">>>" 右移 左边补0 */ /** * 二分查找(递归实现) * @param * @param array 有序数组 * @param from 起始下标 * @param to 终止下标 * @param key 需要查找的关键字 * @return * @throws Exception */ public static <E extends Comparable> int binarySearch(E[]
array, int from, int to, E key) throws Exception { if (from < 0 || to < 0) { throw new IllegalArgumentException("params from & length must larger than 0 ."); } if (from <= to) { int middle = (from >>> 1) + (to >>> 1); // 右移即除2 E temp = array[middle]; if (temp.compareTo(key)
> 0) { to = middle - 1; } else if (temp.compareTo(key) < 0) { from = middle + 1; } else { return middle; } } return binarySearch(array, from, to, key); } /** * 二分查找(非递归实现) * @param a 有序数组 * @param fromIndex 起始下标 * @param toIndex 终止下标 * @param key 需要查找的关键字
* @return */ private static int binarySearch0(int[] a, int fromIndex, int toIndex, int key) { int low = fromIndex; int high = toIndex - 1; while (low <= high) { int mid = (low + high) >>> 1; int midVal = a[mid]; if (midVal < key) low = mid + 1; else if (midVal
> key) high = mid - 1; else return mid; // key found } return -(low + 1); // key not found. }
array, int from, int to, E key) throws Exception { if (from < 0 || to < 0) { throw new IllegalArgumentException("params from & length must larger than 0 ."); } if (from <= to) { int middle = (from >>> 1) + (to >>> 1); // 右移即除2 E temp = array[middle]; if (temp.compareTo(key)
> 0) { to = middle - 1; } else if (temp.compareTo(key) < 0) { from = middle + 1; } else { return middle; } } return binarySearch(array, from, to, key); } /** * 二分查找(非递归实现) * @param a 有序数组 * @param fromIndex 起始下标 * @param toIndex 终止下标 * @param key 需要查找的关键字
* @return */ private static int binarySearch0(int[] a, int fromIndex, int toIndex, int key) { int low = fromIndex; int high = toIndex - 1; while (low <= high) { int mid = (low + high) >>> 1; int midVal = a[mid]; if (midVal < key) low = mid + 1; else if (midVal
> key) high = mid - 1; else return mid; // key found } return -(low + 1); // key not found. }
相关文章推荐
- 查找算法Java实现
- 黑马程序员——Java之二分查找算法
- Java实现的两种常见简单查找算法示例【快速查找与二分查找】
- Java对查找算法的实现—顺序查找(一)
- Java实现的常用的查找算法
- 数据结构Java版的查找算法实现
- 常见查找算法Java实现
- 算法(第四版)学习笔记之二分查找的递归与非递归java实现
- Java实现三种常用的查找算法(顺序查查找,折半查找,二叉排序树查找)
- Java算法之二分查找算法
- Java实现遍历、排序、查找算法及简要说明
- 常用排序、查找算法java实现
- Algs4-1.4.22斐波那契查找算法(Fibonacci Search)Java 实现
- 常见查找算法(Java实现)
- Java实现常见的查找算法--二叉树
- 算法之二分查找(java版实现加测试)
- Java之二分查找算法
- 各类查找算法及Java实现
- [查找算法]--二分查找的Java实现
- Java对查找算法的实现—二分查找(二)