Java 二分查找法 青旅半醒 2022-02-09 11:45 383阅读 0赞 ### 什么是二分查找? ### **二分查找(binary search)**,也称对数搜索(logarithmic search),是一种在 有序数组 中查找某一特定元素的搜索算法。 * 搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束; * 如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。 * 如果在某一步骤数组为空,则代表找不到。 * 这种搜索算法每一次比较都使搜索范围缩小一半。 -------------------- **下面是二分查找的程序代码** public static int binary(int[] arr, int data) { int min = 0; int max = arr.length - 1; int mid; while (min <= max) { mid = (min + max) / 2; if (arr[mid] > data) { max = mid - 1; } else if (arr[mid] < data) { min = mid + 1; } else { return mid; } } return -1; } 分析以上代码是否存在问题?哪里会出现 bug ? 对于上面的方法而言,问题出在第 6 行代码处: mid = (min + max) / 2; 在 min 和 max 很大的时候,会出现溢出的情况,从而导致数组访问出错。 **改进办法:将加法变成减法,代码如下:** public static int binary(int[] arr, int data) { int min = 0; int max = arr.length - 1; int mid; while (min <= max) { // 防止溢出 mid = min + (max - min) / 2; if (arr[mid] > data) { max = mid - 1; } else if (arr[mid] < data) { min = mid + 1; } else { return mid; } } return -1; } **官方的二分搜索法的实现写法:使用 位运算,代码如下:** public static int binary(int[] arr, int data) { int min = 0; int max = arr.length - 1; int mid; while (min <= max) { // 无符号位运算符的优先级较低,先括起来 mid = min + ((max - min) >>> 1); if (arr[mid] > data) { max = mid - 1; } else if (arr[mid] < data) { min = mid + 1; } else { return mid; } } return -1; }
相关 二分查找法 前提是在已经排好序的数组中,通过将待查找的元素与中间的索引值对应的元素进行比较,若大于中间索引值对应的元素,去右半部分查找,否则,去左半部分查找。以此类推,直到找到为止;找不到 野性酷女/ 2024年01月01日 06:49/ 0 赞/ 408 阅读
相关 二分查找法 理解二分查找 二分查找,在一组有序数中查找你想要的找到的数值。比如在数组arr\[10\] = \{1,2,3,4,5,6,7,8,9,10\},中查找一个数字7。 电玩女神/ 2023年10月08日 14:16/ 0 赞/ 160 阅读
相关 二分查找法 概述:二分查找法又称折半查找法,是一种效率较高的查找方式,但,二分查找法要求数组必须采用顺序存储结构有序排列。 下面是相关代码: public class Demo 你的名字/ 2023年10月03日 11:19/ 0 赞/ 28 阅读
相关 二分查找法 想使用二分查找法,前提是这个数列需要是有序的 template<typename T> int binarySearch(T arr[],int n, T t 柔光的暖阳◎/ 2022年10月21日 03:49/ 0 赞/ 256 阅读
相关 二分查找法 算法描述 折半的思想去定位要查找的元素 步骤: 1. 前提:有已排序数组 A(假设已经做好) 2. 定义左边界 L、右边界 R,确定搜索范围,循环执行二分查找(3、 红太狼/ 2022年09月14日 09:58/ 0 赞/ 286 阅读
相关 二分查找法 package com.wdl.day07; / @创建人 wdl @创建时间 2021/8/9 @描述 / public class 小鱼儿/ 2022年09月04日 01:45/ 0 赞/ 125 阅读
相关 java 二分查找法 数组sort排序后通过二分查找得到的索引位置已经不是初始数组的位置了,所以它 真正“实用” 在哪里呢? 下面例子中99排序前是在索引位置5,排序后却是6,所以结果不 不念不忘少年蓝@/ 2022年08月17日 15:19/ 0 赞/ 283 阅读
相关 二分查找法 二分查找法,所需查找次数最高为logn,以2为底 def binary_search(list, item): low and high keep tr 心已赠人/ 2022年05月18日 00:41/ 0 赞/ 302 阅读
相关 二分查找法 最基本的二分查找法、不考虑数组有重复数据、匹配到返回具体元素、没有返回-1 public class TestBinary { public int 淡淡的烟草味﹌/ 2022年02月27日 09:24/ 0 赞/ 392 阅读
相关 Java 二分查找法 什么是二分查找? 二分查找(binary search),也称对数搜索(logarithmic search),是一种在 有序数组 中查找某一特定元素的搜索算法。 青旅半醒/ 2022年02月09日 11:45/ 0 赞/ 384 阅读
还没有评论,来说两句吧...