搜索
首页Javajava教程了解归并排序算法(附Java示例)

合并排序:综合指南

合并排序是一种高效的排序算法,经常在各种编程语言中使用,无论是独立的还是作为混合方法的一部分。 它的基础在于分而治之的范式:一个问题被分解成更小的子问题,单独解决,然后将它们的解决方案组合起来得到最终结果。 合并排序递归地将输入列表分成两半,对每一半进行排序,然后合并已排序的两半以生成完全排序的列表。

理解合并排序过程

让我们使用示例数组来说明合并排序过程:

Understanding Merge Sort Algorithm (with Examples in Java)

此图描绘了数组的递归划分。

Understanding Merge Sort Algorithm (with Examples in Java)

此图显示了排序子数组的合并。

实现合并排序

下面是归并排序算法的 Java 实现:

import java.util.Arrays;

public class MergeSortTest {
    public static void main(String[] args){
        int[] arr = {8, 2, 6, 4, 9, 1};
        System.out.println("Unsorted array: " + Arrays.toString(arr));
        mergeSort(arr, 0, arr.length-1);
        System.out.println("Sorted array: " + Arrays.toString(arr));
    }

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

    static void merge(int arr[], int start, int mid, int end){
        int[] left = new int[(mid - start) + 1];
        int[] right = new int[end - mid];

        for(int i = 0; i <= mid - start; i++)
            left[i] = arr[start + i];
        for(int j = 0; j < end - mid; j++)
            right[j] = arr[mid + 1 + j];

        int i = 0, j = 0;
        int k = start;

        while (i < left.length && j < right.length){
            if(left[i] <= right[j]){
                arr[k] = left[i];
                i++;
            }
            else{
                arr[k] = right[j];
                j++;
            }
            k++;
        }

        while (i < left.length){
            arr[k] = left[i];
            i++;
            k++;
        }

        while (j < right.length){
            arr[k] = right[j];
            j++;
            k++;
        }
    }
}

代码说明

mergeSort 方法递归地划分数组,直到子数组仅包含一个元素。 merge 方法至关重要;它获取已排序的子数组并将它们有效地合并为单个已排序的数组。 合并过程涉及比较两个子数组中的元素并将较小的元素放入主数组中。

Understanding Merge Sort Algorithm (with Examples in Java)

此图说明了合并步骤。

代码的输出是:

未排序数组:[8,2,6,4,9,1] 排序数组:[1, 2, 4, 6, 8, 9]

算法复杂度

  • 时间复杂度: 在所有情况下(最佳、平均和最差)O(n log n)。这是因为无论输入数组的初始顺序如何,分治方法都保持一致。
  • 空间复杂度: O(n),因为合并操作期间临时数组需要额外的空间。

以上是了解归并排序算法(附Java示例)的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热工具

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

Dreamweaver Mac版

Dreamweaver Mac版

视觉化网页开发工具

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。