Java 二分查找2025年7月14日 | 阅读 7 分钟 二分查找是一种高效的算法,用于在已排序的数组或列表中搜索目标元素。它遵循分治法的思想。它比线性搜索更快。请注意,在执行二分查找之前,数组或列表必须已排序。如果我们有一个未排序的数组或列表,我们可以使用 Arrays.sort(arr) 方法对数组进行排序。 二分查找的工作原理
二分查找算法二分查找示例考虑以下数组。我们取了一个已排序的数组,我们要从中搜索值 28(目标元素)。 ![]() 目标元素大于当前中间元素(即 28)。搜索移至右侧子数组。在右侧子数组中,中间元素是 32,目标元素(28)小于中间元素。因此,搜索移至数组的右侧。我们找到了目标元素。停止搜索。 ![]() 二分查找的方法执行二分查找有以下三种方法:
二分查找示例让我们在 Java 程序中实现二分查找逻辑。 示例编译并运行输出 Element found at index: 3 使用迭代方法进行二分查找Java 中的二分查找迭代方法是一种直接而有效的技术,用于在已排序的数组中查找目标元素的位置。此方法使用 while 循环,在每次迭代后将搜索范围减半,并根据与目标值的比较来调整起始和结束索引。 示例编译并运行输出 Element found at index: 4 使用递归进行二分查找递归方法在每次调用时将数组分成两半,根据与中间值比较的结果,将搜索区域缩小到左侧或右侧片段。递归继续进行,直到找到目标或搜索空间为空,此时算法终止。 让我们在 Java 程序中实现递归方法。 示例编译并运行输出 Element is found at index: 2 使用 Arrays.binarySearch() 方法进行二分查找Java Arrays 类为 byte、char、int、float、double、long、object 和 short 数据类型提供了不同的 binarySearch() 方法变体。它是一个静态方法。 该方法使用二分查找算法搜索指定值。在此调用之前,数组必须已排序(通过 sort(int[]) 方法)。如果未排序,结果是不确定的。如果数组包含多个具有指定值的元素,则不保证找到哪个元素。 语法 该方法接受两个参数:要搜索的数组和要搜索的元素(键)。当找到目标元素时,它返回元素的索引值;否则,它返回一个负值,表示插入点以保持数组排序。 示例编译并运行输出 Element found at index: 4 使用 Collections.binarySearch() 方法进行二分查找Java Collections 类还提供了内置的 binarySearch() 方法。该方法使用二分查找算法搜索指定的对象。列表必须按升序排序。如果列表未排序,结果是不确定的。如果列表包含多个与指定对象相等的元素,则不保证找到哪个元素。它通过提供标准化的优化方法来查找元素,从而简化了 Java Collections 中的搜索操作。 语法 该方法接受两个参数:要搜索的列表和要搜索的键元素。它返回键元素的索引值。 示例编译并运行输出 Element found at index: 5 复杂度分析时间复杂度 在二分查找中,在每一步,算法都会将数组除以 2。经过 k 步后,大小变为 n / 2k。当我们解 n / 2k = 1 时,我们得到 k = log₂(n)。
空间复杂度
Java 二分查找选择题1. 二分查找要正确处理数组,必须满足什么条件?
答案:B) 解释:二分查找通过将搜索区间减半来工作,这只有在数组已排序时才可能。 2.二分查找的平均时间复杂度是多少?
答案:B 解释:二分查找的平均情况复杂度为 O(log n),因为它在每次迭代中将搜索空间减半。 3.与线性搜索相比,在什么情况下二分查找会更有效?
答案:B) 解释:由于其对数时间复杂度,二分查找对于大型已排序数组更有效,而线性搜索的时间复杂度为 O(n)。 4.如果找不到目标元素,二分查找的返回值将是什么?
答案:A) 解释:在大多数实现中,二分查找返回 -1 来表示未找到目标元素。 5.以下关于二分查找的迭代和递归实现,哪项是正确的?
答案:B) 解释:虽然这两种实现都具有相同的时间复杂度,但递归实现为调用堆栈使用了额外的空间。 下一个主题Java 程序 |
我们请求您订阅我们的新闻通讯以获取最新更新。