Java 基础教程

Java 面向对象

Java 高级教程

Java 笔记

Java FAQ

java binarysearch二分查找


在 Java 中,二分查找(Binary Search)是一种高效的查找算法,适用于已排序的数组或列表。它通过将查找范围逐渐缩小一半,从而快速定位目标元素。下面我将介绍两种实现方式:递归实现和迭代实现。

递归实现二分查找

这种实现方式使用递归函数来不断缩小查找范围。

步骤流程:

  1. 定义一个递归函数 binarySearchRecursive,它接收目标值 target 、数组 arr 、查找范围起始索引 left 和结束索引 right 作为参数。
  2. 在递归函数内,计算中间索引 mid,即 (left + right) / 2
  3. 检查 arr[mid] 是否等于 target,如果是则返回 mid
  4. 如果 arr[mid] 大于 target,在左半边继续递归调用 binarySearchRecursive,参数为 (target, arr, left, mid - 1)
  5. 如果 arr[mid] 小于 target,在右半边继续递归调用 binarySearchRecursive,参数为 (target, arr, mid + 1, right)
  6. 如果 left 大于 right,说明目标值不在数组中,返回 -1。

示例代码:

public class BinarySearch {

    public static int binarySearchRecursive(int target, int[] arr, int left, int right) {
        if (left <= right) {
            int mid = left + (right - left) / 2;

            if (arr[mid] == target) {
                return mid;
            } else if (arr[mid] > target) {
                return binarySearchRecursive(target, arr, left, mid - 1);
            } else {
                return binarySearchRecursive(target, arr, mid + 1, right);
            }
        }
        return -1;
    }

    public static void main(String[] args) {
        int[] arr = {1, 3, 5, 7, 9, 11, 13, 15};
        int target = 9;
        int result = binarySearchRecursive(target, arr, 0, arr.length - 1);
        if (result != -1) {
            System.out.println("Element found at index: " + result);
        } else {
            System.out.println("Element not found.");
        }
    }
}

迭代实现二分查找

这种实现方式使用循环来进行二分查找。

步骤流程:

  1. 初始化变量 left 为 0,right 为数组长度减一。
  2. 在循环中,计算中间索引 mid,即 (left + right) / 2
  3. 检查 arr[mid] 是否等于 target,如果是则返回 mid
  4. 如果 arr[mid] 大于 target,将 right 更新为 mid - 1
  5. 如果 arr[mid] 小于 target,将 left 更新为 mid + 1
  6. 如果 left 大于 right,说明目标值不在数组中,返回 -1。

示例代码:

public class BinarySearch {

    public static int binarySearchIterative(int target, int[] arr) {
        int left = 0;
        int right = arr.length - 1;

        while (left <= right) {
            int mid = left + (right - left) / 2;

            if (arr[mid] == target) {
                return mid;
            } else if (arr[mid] > target) {
                right = mid - 1;
            } else {
                left = mid + 1;
            }
        }
        return -1;
    }

    public static void main(String[] args) {
        int[] arr = {1, 3, 5, 7, 9, 11, 13, 15};
        int target = 9;
        int result = binarySearchIterative(target, arr);
        if (result != -1) {
            System.out.println("Element found at index: " + result);
        } else {
            System.out.println("Element not found.");
        }
    }
}

Maven 依赖: 无需额外依赖。

Gradle 依赖: 无需额外依赖。

这两种实现方式都能有效地进行二分查找。递归实现的代码相对更简洁,但可能在处理大量数据时产生堆栈溢出问题。迭代实现更适合大规模数据集合,且不会出现堆栈溢出问题。根据实际情况选择适合的实现方式。

在Java中,有几种常见的快速查找算法,包括二分查找、哈希表查找以及树结构查找(如二叉搜索树)。示例代码:Maven依赖:Gradle依赖: ...
在Java中使用EasyExcel库来查找Word目录需要先将Word文档转换为文本,然后在文本中查找目录信息。使用EasyExcel处理提 ...
###方法1:使用循环遍历列表这是一种基本的方法,通过循环遍历列表来查找指定的值。###方法5:使用第三方库-NumPy如果你处理大型数组, ...
查找是在大量的信息中寻找一个特定的信息元素,在计算机应用中,查找是常用的基本运算。折半查找的前提条件是需要有序表顺序存储,对于静态查找表,一 ...
Mac 下 PyCharm 全局搜索(查找)快捷键如下。 ...