[java] 二分法查找
来源:互联网 发布:韩国主播用什么软件 编辑:程序博客网 时间:2024/06/05 07:16
首先上二分法java实现的代码
import java.util.Arrays;public class BinarySearch { public static int rank(int key, int[] a) { //数组必须是有序的 int lo = 0; int hi = a.length - 1; while(lo <= hi) { //被查找的键要么不存在,要么必然存在于a[lo...hi]之中 int mid = lo + (hi - lo) / 2; if(key < a[mid]) { hi = mid - 1; }else if(key > a[mid]) { lo = mid + 1; }else { return mid; } } return -1; } public static void main(String[] args) { int[] arr = new int[] {1,2,7,5,9,10}; Arrays.sort(arr); System.out.println(Arrays.toString(arr)); int index = BinarySearch.rank(7, arr); System.out.println(index); }}
要求:传入的数组必须是排好序的
逻辑:先将数组分为中间,左边数组,右边数组。如果要查找的key正好是中间的则反回索引,如果key 大于 arr[mid],则在右面继续查找,反之在左面查找。当到达边界还没找到时,也就是lo==hi时,lo++ 会大于hi,或者 hi– 会小于lo。则循环终止,返回-1
我们先谈谈mid值的计算
//如果数组的长度为奇数 数组正好被平均的分为左右两个要查找数组//如数组为 int[] arr = new int{1,2,3,4,5}//则数组的mid 为 (arr.length - 1) / 2 = 2//mid左边的数组为{1,2}, 右面为 {4, 5}
//如果数组的长度为偶数//如数组为 int[] arr = new int{1,2,3,4,5,6}//则数组的mid 为 (arr.length - 1) / 2 = 2//mid左边的数组为{1,2}, 右面为 {4, 5, 6}
0 0
- java 二分法查找
- JAVA 二分法查找实现
- java二分法查找法
- JAVA 二分法查找实现
- JAVA 二分法查找
- java实现二分法查找
- java 二分法查找
- Java二分法查找
- java实现二分法查找
- Java 二分法查找
- Java实现二分法查找
- Java 二分法查找
- Java 实现二分法查找
- java 二分法查找
- java 二分法查找实现
- Java 二分法查找算法
- Java 二分法查找
- java二分法查找
- 【BZOJ】1041: [HAOI2008]圆上的整点
- ubuntu安装和查看已安装
- uva11997
- 132. Palindrome Partitioning II
- 云计算系列之OpenStack入门指南
- [java] 二分法查找
- 网络编程系列之入门篇(Java)
- mac xcode lua to c and c to lua lua和c互调
- C primer plus(编程练习)file-9.11-2
- 1042. 字符统计(20)
- 1043. 输出PATest(20)
- 洛谷P2606 [ZJOI2010]排列计数
- [BZOJ3611][Heoi2014]大工程 虚树+dp
- 1047. 编程团体赛(20)