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

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

今天,我们继续来学习下算法,通过 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] < target) {
                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 的彩蛋!

今日代码大赏 | Java 使用递归反转句子

今日代码大赏 | Java 实现字符串转为日期

今日代码大赏 | Java 实现冒泡排序

相关推荐

  • 三轮电商公司面试,已拿 Offer!
  • 一个小公司的技术开发心酸事(已倒闭)
  • 高校老师因发消息爱打问号被学生投诉!被学校撤职后反手上诉获赔13万
  • 来势汹汹的Linux系统激爆网络神秘地带
  • 重磅发布:aiXcoder-7B代码大模型正式开源
  • 开源副屏「操作系统」底层采用Electron,是生产力工具还是美丽的废物?
  • 基于OpenCV的路面质量检测
  • 判定二级教学事故!大学教师被解聘
  • 【深度学习】Unet++(pytorch实现)
  • 【深度学习】目标检测的常用数据处理方法!
  • 手机可以跑大模型了,一夜下载量超2000
  • 开源go实现的IOT物联网新基建平台
  • 11.8K Star开源了!从此DevOps有了新选择
  • 我为什么使用 Linux 做开发?
  • 重磅:2024 年 QS 世界大学学科排名出炉!
  • 外包巨头大规模裁员,砍掉 22063 人!
  • 王慧文,投了个中国版Character.AI
  • 搭建完美的技术写作环境,第1-8章
  • 太神了!首位 AI 程序员上线,居然可以修复自己写的bug
  • 原子化状态管理库 Jotai,它和 Zustand 有啥区别?