二分查找算法解析(java版)
来源:互联网 发布:linux cannot find lc 编辑:程序博客网 时间:2024/05/26 19:16
二分查找:
(1)确定该区间的中点位置:mid=(low+high)/2
min代表区间中间的结点的位置,low代表区间最左结点位置,high代表区间最右结点位置
(2)将待查a值与结点mid的关键字(下面用R[mid].key)比较,若相等,则查找成功,否则确定新的查找区间:
如果R[mid].key>a,则由表的有序性可知,R[mid].key右侧的值都大于a,所以等于a的关键字如果存在,必然在R[mid].key左边的表中。这时high=mid-1
如果R[mid].key<a,则等于a的关键字如果存在,必然在R[mid].key右边的表中。这时low=mid
如果R[mid].key=a,则查找成功。
(3)下一次查找针对新的查找区间,重复步骤(1)和(2)
(4)在查找过程中,low逐步增加,high逐步减少,如果high<low,则查找失败。
实现方式有两种:
//1、递归实现:public static int binarySerach2(int[] array, int low, int high, int key){int middle = (low+high)/2;if (low > high) {return -1;}if (array[middle] == key) {return middle;}else if (array[middle] > key) {return binarySerach2(array, low, middle-1, key);}else {return binarySerach2(array, middle+1, high, key);}}
//2、while循环实现:public static int binarySerach(int[] array, int key){int low = 0;int high = array.length - 1;int middle = 0;while (low <= high) {middle = (low+high)/2;if (array[middle] == key) {return middle;}else if (array[middle] > key) {high = middle - 1;}else {low = middle + 1;}}return -1;}
JDK自带实现:位于java.util.Arrays包中
public static int binarySearch(int[] a, int fromIndex, int toIndex, int key) { rangeCheck(a.length, fromIndex, toIndex); return binarySearch0(a, fromIndex, toIndex, key); } // Like public version, but without range checks. 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. }// 健壮性判断 private static void rangeCheck(int length, int fromIndex, int toIndex) { if (fromIndex > toIndex) { throw new IllegalArgumentException( "fromIndex(" + fromIndex + ") > toIndex(" + toIndex + ")"); } if (fromIndex < 0) { throw new ArrayIndexOutOfBoundsException(fromIndex); } if (toIndex > length) { throw new ArrayIndexOutOfBoundsException(toIndex); } }
0 0
- 二分查找算法解析(java版)
- 二分查找算法解析
- 二分查找算法(Java版)
- 二分查找算法(java)二分搜索
- java 二分查找算法
- java 二分查找算法
- Java二分查找算法
- java 二分查找算法
- 二分查找算法(Java)
- Java-二分查找算法
- Java二分查找算法
- Java-二分查找算法
- 二分查找算法-java
- Java二分查找算法
- java二分查找算法
- Java算法--二分查找
- Java二分查找算法
- java 二分查找算法
- 回文数C程序
- ACM POJ 1088 滑雪
- 今晚的月亮壹定很美
- 字符输入限制(包含中文等限制)
- ShardedJedis 错误使用
- 二分查找算法解析(java版)
- 以下是一个敏感词过滤的的小例题
- 批处理判断文件夹是否存在
- 嵌入式 使用mp4v2将H264+AAC合成mp4文件
- intel dpkt, userspace network application
- Android打包出现形如“Dx bad class file magic (cafebabe) or version (0033.0000)1”的错误的原因及其解决办法
- SQL SERVER 收缩数据库的命令
- am3359 uboot nor flash支持
- java--家庭电视类(加类修改版)