java二分查找
来源:互联网 发布:网络电视怎么用遥控器 编辑:程序博客网 时间:2024/06/08 00:25
二分查找
/*
二分查找 数组 必须 是有序 的
java中 提供了二分查找 的方法
Arrays.binarySearch(arr2,45);注意:如果利用java中提供的二分查找,如果查找 的元素不存在,它会返回这个元素的插入点,值为 负插入点减一这里返回这个的原因是,返回负数是为了表示 这个元素不存在于这个数组 中,减去一是因为如果要插入的这个值是数组的第一个元素,这时如果 返回 0 会让人误以为元素存在于这个数组中,且是第一个元素,所以这里减去一,保证了这个元素不论是几,只要不存在于这个数组 中,就会返回一个负数;例如int[] arr2 = {12, 23, 35, 48, 56, 65, 78, 100};int keyd = Arrays.binarySearch(arr2,45);
这里返回的是 -4
int[] arr2 = {12, 23, 35, 48, 56, 65, 78, 100};int key = Arrays.binarySearch(arr2, 10);这里返回的是 -1
int[] arr2 = {12, 23, 35, 48, 56, 65, 78, 100};int key = halfSearch(arr2, 48);这里返回的是 3
int[] arr2 = {12, 23, 35, 48, 56, 65, 78, 100};int keyd = Arrays.binarySearch(arr2,45);这里返回的是 -4
int[] arr2 = {12, 23, 35, 48, 56, 65, 78, 100};int key = Arrays.binarySearch(arr2, 10);这里返回的是 -1
int[] arr2 = {12, 23, 35, 48, 56, 65, 78, 100};int key = Arrays.binarySearch(arr2, 10);这里返回的是 -1
int[] arr2 = {12, 23, 35, 48, 56, 65, 78, 100};int key = halfSearch(arr2, 48);这里返回的是 3
int[] arr2 = {12, 23, 35, 48, 56, 65, 78, 100};int key = halfSearch(arr2, 48);这里返回的是 3
int[] arr2 = {12, 23, 35, 48, 56, 65, 78, 100};int key = halfSearch(arr2, 48);这里返回的是 3
*/
一,数组 的查找功能
/** * 数组功能 查找 * 查找 当前位置的角标 */public static int getIndex(int[] arr, int key) { for (int i = 0; i < arr.length; i++) { if (arr[i] == key) { return i; } } return -1;}二、二分查找/** * 二分查找 方法一 * */public static int halfSearch(int[] arr, int key) { int min = 0; int max = arr.length - 1; int mid = (min + max) / 2; while (arr[mid] != key) { if (key > arr[mid]) { min = mid + 1; } else if (key < arr[mid]) { max = mid - 1; } if (max < min) { return -1; } mid = (min + max) / 2; } return mid;}/** * 方法二 * @param arr * @param key * @return */public static int halfSearch_2(int[] arr, int key) { int min = 0; int max = arr.length - 1; int mid = (min + max) / 2; while (mid < max) { mid = (min + max) / 2; if (key > arr[mid]) { min = mid + 1; } else if (key < arr[mid]) { max = mid - 1; } else return mid; } return -1;}三、如果要在一个有序的数组中插入一个不存的元素,并且插入后数组还是有序的,
这时把二分查找 的返回值 变一下就行/** * 二分查找 方法一 * */public static int halfSearch(int[] arr, int key) { int min = 0; int max = arr.length - 1; int mid = (min + max) / 2; while (arr[mid] != key) { if (key > arr[mid]) { min = mid + 1; } else if (key < arr[mid]) { max = mid - 1; } if (max < min) { return min; } mid = (min + max) / 2; } return mid;}
阅读全文
0 0
- 二分查找(折半查找) java
- Java二分查找、折半查找
- java二分查找
- java 二分查找法
- java二分查找
- Java实现 二分查找
- java二分查找
- java:二分查找法
- java 二分查找算法
- java二分查找
- java 二分查找算法
- java二分查找
- Java二分查找算法
- Java二分查找
- Java实现二分查找
- java二分查找法
- java实现二分查找
- 二分查找 java代码
- Android 开发规范推荐
- 现阶段AI应用的几个场景
- stm32f103使用bootloadr升级后,nuttx跑不起来,必须重启的问题
- 使用maven搭建SSM完整框架
- SQL SERVER 2008用Select操作处理数据(一)——查询语句的语法流
- java二分查找
- (二)jQuery效果
- Android kotlin实现自定义水波纹效果
- It's likely that neither a Result Type nor a Result Map was specified
- MySQL知识点
- Viewpager自动轮播.循环(无误)
- javax.mail.AuthenticationFailedException异常的处理
- android sensor 3
- Ionic-Android平台项目调试时出错:The connection to the server was unsuccessful