📜  Java中的二分查找(1)

📅  最后修改于: 2023-12-03 14:42:55.779000             🧑  作者: Mango

Java中的二分查找

介绍

二分查找(Binary Search),也称折半查找,是一种算法思想,常用于在有序数组中查找某一特定元素。二分查找的时间复杂度为 $O(log_2(n))$,比线性查找的时间复杂度 $O(n)$ 更快。

实现

以下是一个简单的 Java 代码实现,其中 binarySearch() 方法为二分查找的核心方法。该方法接收两个参数,第一个是有序数组 arr,第二个是需要查找的元素 target。如果 target 在 arr 中,则返回其下标;否则返回 -1。

public class BinarySearch {
    /**
     * 二分查找核心方法
     *
     * @param arr    有序数组
     * @param target 需要查找的元素
     * @return target 在 arr 中的下标,若不存在,则返回 -1
     */
    public static int binarySearch(int[] arr, int target) {
        int left = 0;
        int right = arr.length - 1;
        while (left <= right) {
            int mid = (left + right) / 2;
            if (arr[mid] == target) {
                return mid;
            } else if (arr[mid] < target) {
                left = mid + 1;
            } else {
                right = mid - 1;
            }
        }
        return -1;
    }

    public static void main(String[] args) {
        int[] arr = {1, 3, 5, 7, 9};
        int result1 = binarySearch(arr, 5);
        int result2 = binarySearch(arr, 4);
        System.out.println(result1); // 输出 2
        System.out.println(result2); // 输出 -1
    }
}

注意,数组 arr 必须是有序的,否则无法得到正确的结果。可以使用 Arrays 类的 sort() 方法预先对数组进行升序排序。

总结

二分查找是一种快速查找有序数组中元素的方法,可以有效降低时间复杂度。但前提是必须先对数组进行排序。在实际场景中应用广泛,比如在数据库索引、路由表查找等领域均有应用。