📜  Java 二进制搜索 - Java (1)

📅  最后修改于: 2023-12-03 15:15:58.648000             🧑  作者: Mango

Java 二进制搜索 - Java

二进制搜索(Binary Search)是一种高效的查找算法,它通过折半的方式不断缩小查找的范围,最终找到需要查找的元素。在Java中,我们可以通过递归或循环来实现二进制搜索。

算法思路:

  1. 找到数组中间的元素 mid。
  2. 如果 mid 等于目标元素,则返回 mid。
  3. 如果 mid 大于目标元素,则在数组左边部分继续查找。
  4. 如果 mid 小于目标元素,则在数组右边部分继续查找。
  5. 重复以上步骤,直到找到目标元素或无法继续查找为止。
代码实现

以下是通过递归实现二进制搜索的Java代码片段。

/**
 * 二进制搜索(递归实现)
 * @param arr 查找的数组
 * @param left 左边界
 * @param right 右边界
 * @param target 目标元素
 * @return 目标元素在数组中的下标,如果不存在则返回 -1
 */
public static int binarySearch(int[] arr, int left, int right, int target) {
    if (left > right) {
        return -1;
    }

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

以下是通过循环实现二进制搜索的Java代码片段。

/**
 * 二进制搜索(循环实现)
 * @param arr 查找的数组
 * @param target 目标元素
 * @return 目标元素在数组中的下标,如果不存在则返回 -1
 */
public static int binarySearch(int[] arr, int target) {
    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;
}
性能分析

二进制搜索的时间复杂度为 O(log n),是一种非常高效的查找算法。但是,它只适用于有序数组,如果需要在无序数组中进行查找,我们可以先对数组进行排序,然后再使用二进制搜索。

总结

二进制搜索是一种高效的查找算法,在Java中我们可以通过递归或循环来实现。它的时间复杂度为 O(log n),适用于有序数组。在实际应用中,我们可以先对数组进行排序,然后再使用二进制搜索来查找需要的元素。