今日代码大赏 | Java 实现归并排序算法

前两天我们分享了 Python 实现归并排序算法后,今天我们将使用 Java 语言来实现这一经典算法。

可点击下方文章标题,直接跳转回顾 Python 实现归并排序算法哦!

Python 实现归并排序算法

归并排序,作为一种分治策略的代表,其核心思想是将大问题分解为小问题,通过解决小问题来逐步解决整个问题。具体到归并排序,即是将待排序数组不断分割成两半,对每一半进行排序,最后再将两个已排序的部分合并成一个有序的整体。

下面是使用 Java 实现归并排序算法的示例代码:

public class MergeSort {
    public static void main(String[] args) {
        int[] arr = {121113567};
        mergeSort(arr, 0, arr.length - 1);
        System.out.println("排序后的数组:");
        for (int i : arr) {
            System.out.print(i + " ");
        }
    }

    public static void mergeSort(int[] arr, int left, int right) {
        if (left < right) {
            int mid = (left + right) / 2;
            mergeSort(arr, left, mid);
            mergeSort(arr, mid + 1, right);
            merge(arr, left, mid, right);
        }
    }

    public static void merge(int[] arr, int left, int mid, int right) {
        int n1 = mid - left + 1;
        int n2 = right - mid;

        // 创建临时数组
        int[] L = new int[n1];
        int[] R = new int[n2];

        // 拷贝数据到临时数组
        System.arraycopy(arr, left, L, 0, n1);
        System.arraycopy(arr, mid + 1, R, 0, n2);

        // 合并临时数组回原数组
        int i = 0, j = 0;
        int k = left;
        while (i < n1 && j < n2) {
            if (L[i] <= R[j]) {
                arr[k] = L[i];
                i++;
            } else {
                arr[k] = R[j];
                j++;
            }
            k++;
        }

        // 拷贝 L 剩余元素
        while (i < n1) {
            arr[k] = L[i];
            i++;
            k++;
        }

        // 拷贝 R 剩余元素
        while (j < n2) {
            arr[k] = R[j];
            j++;
            k++;
        }
    }
}

运行上述程序,输出结果为:排序后的数组:5 6 7 11 12 13

归并排序的时间复杂度为 O(n log n),这一性能在最坏、平均和最好情况下均保持不变,因此它特别适合处理大规模数据集。

今天的代码大赏就到这里。希望通过这篇文章,你能够对 Java 实现的归并排序算法有一个更深入的理解。

如果你对其他语言实现的归并排序算法感兴趣,或者有任何关于算法的问题,欢迎在评论区留下你的足迹。

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

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


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

往期推荐

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

今日代码大赏 | Python 实现归并排序算法

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

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

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

相关推荐

  • 离开大厂创业一年,从未受过这么大的打击!
  • 倒计时1天|在中国AIGC产业峰会,一天看尽AIGC最新趋势
  • Sora进驻Adobe视频编辑软件!新版Premiere Pro开启AI剪辑时代
  • 北大学生优化清华系大模型,拿ASC全球超算大赛冠军
  • AI换脸以假乱真!蚂蚁数科发布反DeepFake产品,还设百万奖金池邀请黑客找bug
  • 一句话打造Agent!李彦宏:人人都是开发者的时代到来
  • 价值观罗盘:如何让大模型与人类价值观对齐?
  • NAACL 2024 | 阿里提出大语言模型对齐框架Reward Learning on Policy (RLP)
  • 上海期智研究院诚聘人工智能、信息安全、量子智能及相关方向海内外顶尖人才
  • 国产开源物联网操作系统
  • .5.1K Star很不错!一个数据库设计工具
  • 我,年入14.6亿,坚决不融资不上市
  • 分享一篇关于SEO优化的前端知识总结
  • 前端常用的几种请求方式
  • 赛博菩萨Cloudflare
  • 从500ms到3ms,你还在用axios吗?
  • 华为自用的时序数据库开源啦,来看看水平怎么样?
  • 云开源公司成“恶龙”?——指控Linux基金会旗下开源项目盗用代码
  • 刘强东 AI 数字人将开启直播;淘宝上线苹果Vision Pro;特斯拉高级副总裁宣布离职 | 极客头条
  • 李彦宏:开源模型会越来越落后,自然语言将成为新的通用编程语言