专栏名称: 程序员鱼皮
鹅厂全栈开发,持续分享编程技法和实用项目
目录
相关文章推荐
gooood谷德设计网  ·  Wutopia Lab俞挺新作|江苏宜兴陶书局 ·  3 天前  
结构先声  ·  DeepSeek结构计算案例分析,实力超乎想象! ·  3 天前  
结构先声  ·  DeepSeek结构计算案例分析,实力超乎想象! ·  3 天前  
gooood谷德设计网  ·  巴黎第12区Racine塔楼改造 ·  4 天前  
gooood谷德设计网  ·  捷克Milada度假屋 ·  4 天前  
51好读  ›  专栏  ›  程序员鱼皮

今日代码大赏 | Java 实现二分查找算法

程序员鱼皮  · 公众号  ·  · 2024-04-13 22:50

正文

掌握高效的算法是每个开发者的必备技能。正如古代智者所言:“授人以鱼不如授人以渔。” 这句话告诉我们,掌握一项技能比单纯获得结果更有价值。

今天,我们继续来学习下算法,通过 Java 语言来实现一个简单而强大的算法 —— 二分查找。

首先为了加强大家对二分查找的认识,先来介绍下二分查找,二分查找算法是一种在有序集合中查找特定元素的算法。通过每次将集合分为两部分并比较中间元素,我们可以快速缩小搜索范围,从而提高查找效率。

下面是一个 Java 程序实现二分查找算法的示例代码:

public class BinarySearch {

    /**
     * 在有序数组中使用二分查找算法寻找目标值的索引
     * @param nums 有序数组
     * @param target 目标值
     * @return 目标值的索引,如果未找到则返回 -1
     */

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

        while (left <= right) {
            int mid = left + (right - left) / 2;
            if (nums[mid] == target) {
                return mid; // 找到目标值,返回其索引
            } else if (nums[mid]                 left = mid + 1// 在右侧子数组中查找
            } else {
                right = mid - 1// 在左侧子数组中查找
            }
        }

        return -1// 未找到目标值,返回 -1
    }

    public static void main(String[] args) {
        int[] nums = {2341040};
        int target = 10;
        int resultIndex = binarySearch(nums, target);

        if (resultIndex != -1) {
            System.out.println("元素 " + target + " 在数组中的索引是 " + resultIndex);
        } else {
            System.out.println("元素 " + target + " 不在数组中");
        }
    }
}

运行上述程序,如果数组 nums 包含元素 10,输出结果将会是: 元素 10 在数组中的索引是 4

在这个例子中,我们首先将数组分为两半,然后递归地对每一半进行归并排序。接着,我们将两个已排序的子数组合并成一个有序数组。

二分查找算法的时间复杂度为 O(log n),其中 n 是数组的长度。这使得二分查找在处理大型数据集时非常高效。

今天的代码大赏就到这里。希望通过这篇文章,你能够对二分查找算法有一个更深入的理解。

如果大家还想看更多的不同语言实现的二分查找算法,欢迎在评论区留下自己的评论。

完整代码片段来源于代码小抄,欢迎点击进入小程序阅读!

在线访问:https://www.codecopy.cn/post/upbvxd

在代码小抄可以看到更多优质代码,也欢迎大家积极分享,可能会获得我们官方的小礼品 🎁~

往期推荐

今日代码大赏 | Java 实现快速排序算法

我成功复刻了安卓 6 的彩蛋!







请到「今天看啥」查看全文