温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何用java写二分搜索

发布时间:2026-10-23 12:53:32 来源:亿速云 阅读:98 作者:小樊 栏目:编程语言

下面用 Java 给你演示几种常见的**二分搜索(Binary Search)**写法,从最基础的到实用的。


一、前提条件

二分搜索只能用于有序数组(升序或降序)。


二、最基础的二分搜索(升序数组)

1️⃣ 循环写法(推荐)

public class BinarySearch {

    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) {
                left = mid + 1;
            } else {
                right = mid - 1;
            }
        }
        return -1; // 没找到
    }

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

三、递归写法(理解用)

public static int binarySearchRecursive(int[] arr, int target, int left, int right) {
    if (left > right) {
        return -1;
    }

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

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

调用:

binarySearchRecursive(arr, 7, 0, arr.length - 1);

四、使用 Java 标准库(最方便)

import java.util.Arrays;

int index = Arrays.binarySearch(arr, 7);

⚠️ 注意:

  • 数组必须已排序
  • 返回值 < 0 表示没找到

五、常见变体

✅ 查找第一个等于 target 的位置

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

六、时间复杂度

  • 时间复杂度:O(log n)
  • 空间复杂度:O(1)(循环)

如果你是想用于:

  • LeetCode 题目
  • 查找边界
  • 浮点数二分
  • 降序数组

可以告诉我,我可以给你针对性示例。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手