ITPub博客

首页 > 数据库 > 数据库开发技术 > 今日代码大赏 | Java 实现归并排序算法

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

原创 数据库开发技术 作者:程序员鱼皮 时间:2024-04-16 18:46:05 0 删除 编辑

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

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

Python 实现归并排序算法

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

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

public class MergeSort {
    public static void main(String[] args) {
        int[] arr = {12, 11, 13, 5, 6, 7};
        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 使用递归反转句子

原文作者:程序员鱼皮;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2023-12-20

  • 博文量
    330
  • 访问量
    151714