二分查找
2014-11-27 21:17
302 查看
/** * 二分查找 * <T extends Comparable<T>> 泛型参数(限定T必须是Comparable类型) * @param array 元素升序排列的数组 * @param key 要查找的元素 * @return 如果找到了返回元素的位置, 没找到返回-1 */ public static <T extends Comparable<T>> int binarySearch(T[] array, T key) { return binarySearch(array, key, new Comparator<T>() { @Override public int compare(T o1, T o2) { return o1.compareTo(o2); } }); } /** * 二分查找 * <T> 泛型参数 * @param array 元素升序排列的数组 * @param key 要查找的元素 * @param comp 比较器对象 * @return 如果找到了返回元素的位置, 没有找到返回-1 */ public static <T> int binarySearch(T[] array, T key, Comparator<T> comp) { int low = 0, high = array.length - 1; while(low <= high) { int mid = (low + high) >>> 1; // int mid = (high - low) / 2 + low; if(comp.compare(array[mid], key) == 0) return mid; else if(comp.compare(key, array[mid]) < 0) high = mid - 1; else low = mid + 1; } return -1; } /** * 二分查找(递归版) */ public static <T> int binarySearch2(T[] array, T key, Comparator<T> comp) { return binarySearch2(array, key, 0, array.length - 1, comp); } private static <T> int binarySearch2(T[] array, T key, int low, int high, Comparator<T> comp) { if(low <= high) { int mid = (low + high) >>> 1; // int mid = (high - low) / 2 + low; if(comp.compare(array[mid], key) == 0) return mid; else if(comp.compare(key, array[mid]) < 0) return binarySearch2(array, key, low, mid - 1, comp); else return binarySearch2(array, key, mid + 1, high, comp); } return -1; }
相关文章推荐
- ZCMU-1679-查找2(二分上界)
- 循环递增的数组 二分查找
- 14. 二分查找
- [算法]二分查找算法
- 二分查找(Binary Search)需要注意的问题,以及在数据库内核中的实现[谁有源码麻烦贴过来个链接学习学习]
- 二分查找的学习
- 关于二分查找的那些事
- 查找算法集:顺序查找、二分查找、插值查找、动态查找(数组实现、链表实现)
- 插入,冒泡,选择,快速排序,二分查找(Java版)
- 二分查找
- 矩阵上的二分查找
- java数组的封装以及二分查找
- 【极难】【二分查找】返回两个数组中第k小的元素
- 二分查找及其扩展循环查找及二维查找
- 你真的能搞定二分查找吗 — 二分查找及变形
- leetcode 154. Find Minimum in Rotated Sorted Array II 旋转数组(重复)+二分查找
- 二分查找
- POJ3273 Monthly Expense (二分统计)+二分查找基础例子
- 数据结构实验之查找四:二分查找
- 转:二分查找的3种不同情况详细介绍