JAVA二分查找源码阅读
2017-03-30 10:37
232 查看
JAVA二分查找
public static <T> int binarySearch(T[] a, int fromIndex, int toIndex,T key, Comparator<? super T> c) { //首先进行范围检查 1 rangeCheck(a.length, fromIndex, toIndex); //然后进行二分查找 2 return binarySearch0(a, fromIndex, toIndex, key, c); }
1 rangeCheck
private static void rangeCheck(int arrayLength, int fromIndex, int toIndex) { //如果起始下标大于结束下标抛出异常 if (fromIndex > toIndex) { throw new IllegalArgumentException( "fromIndex(" + fromIndex + ") > toIndex(" + toIndex + ")"); } //如果起始下标小于0 抛出数组越界异常 if (fromIndex < 0) { throw new ArrayIndexOutOfBoundsException(fromIndex); } //如果结束下标大于数组长度 抛出数组越界异常 if (toIndex > arrayLength) { throw new ArrayIndexOutOfBoundsException(toIndex); } }
2 binarySearch0
private static <T> int binarySearch0(T[] a, int fromIndex, int toIndex,T key, Comparator<? super T> c) { //查看比较器Compator是否是null if (c == null) { //执行默认比较器 3 return binarySearch0(a, fromIndex, toIndex, key); } //省略 }
3 binarySearch0(a, fromIndex, toIndex, key);
private static int binarySearch0(Object[] a, int fromIndex, int toIndex,Object key) { //起始坐标给low int low = fromIndex; //终止坐标给high int high = toIndex - 1; //循环开始 如果 high >= low 那么执行 while (low <= high) { //>>>右移运算符 (low+high)/2 int mid = (low + high) >>> 1; @SuppressWarnings("rawtypes") //取出中间这个值 Comparable midVal = (Comparable)a[mid]; @SuppressWarnings("unchecked") //进行比较 int cmp = midVal.compareTo(key); //如果cmp小于0 说明 key大于a[mid] if (cmp < 0) //那么low变为mid+1 low = mid + 1; else if (cmp > 0) //key小于a[mid] 那么high变成mid-1 high = mid - 1; else //如果cmp==0那么key等于a[mid]返回mid下标 return mid; // key found } //循环直到low > high时 结束 //返回最相近的坐标的相反数 return -(low + 1); // key not found. }
相关文章推荐
- java的Collections中二分查找源码分析
- JAVA源码走读(二)二分查找与Arrays类
- java二分查找
- 插入,冒泡,选择,快速排序,二分查找(Java版)
- Java源码阅读的真实体会
- Java源码阅读的真实体会
- Java源码阅读的真实体会
- 二分查找的递归算法(附源码)_AX
- 线性查找与二分查找(java实现)
- Java实例14 - 二分查找
- 重学java之随机数组二分查找
- 算法导论Java实现-二分查找运用(习题2.3-7)
- java语言实现二分查找数据法
- JAVA实现二分查找
- java二分查找
- Java源码阅读的真实体会
- Java实现折半查找(二分查找)的递归和非递归算法
- Java实现目录查找与文本阅读
- 二分查找的Java实现
- Java源码阅读的真实体会