java 中归并排序算法详解

Java 中归并排序算法详解

算法介绍

归并排序是一种稳定的分治算法,时间复杂度为 O(nlogn),相较于快速排序,归并排序对于需要稳定排序的数据更加适用。

算法步骤

归并排序的主要思想是分治,即将一个大的问题分解为若干个小问题,解决每个小问题,然后合并得到最终的解决方案。

归并排序的具体步骤如下:

  1. 分解:将待排序的数组分解为若干个小数组,直到每个小数组仅包含一个元素,即认为每个小数组本身有序。
  2. 归并:将小数组两两合并,形成更大的有序数组。重复该步骤,直到所有的小数组合并成一个大的有序数组。

实现示例

以下为 Java 实现归并排序算法的示例代码:

public class MergeSort {
    private void merge(int[] arr, int left, int mid, int right) {
        int[] temp = new int[right - left + 1];
        int i = left, j = mid + 1, k = 0;
        while (i <= mid && j <= right) {
            if (arr[i] < arr[j]) {
                temp[k] = arr[i];
                k++;
                i++;
            } else {
                temp[k] = arr[j];
                k++;
                j++;
            }
        }
        while (i <= mid) {
            temp[k] = arr[i];
            k++;
            i++;
        }
        while (j <= right) {
            temp[k] = arr[j];
            k++;
            j++;
        }
        for (int p = 0; p < temp.length; p++) {
            arr[left + p] = temp[p];
        }
    }

    private void mergeSort(int[] arr, int left, int right) {
        if (left >= right) {
            return;
        }
        int mid = left + (right - left) / 2;
        mergeSort(arr, left, mid);
        mergeSort(arr, mid + 1, right);
        merge(arr, left, mid, right);
    }

    public void sort(int[] arr) {
        if (arr == null || arr.length == 0) {
            return;
        }
        mergeSort(arr, 0, arr.length - 1);
    }
}

其中,merge 方法实现数组的合并,mergeSort 方法实现递归分解数组及合并有序数组,sort 方法对外暴露调用接口,调用时需要传入待排序的数组。

以下为使用示例:

public static void main(String[] args) {
    int[] arr = {5, 3, 7, 2, 8, 4, 1, 6};
    MergeSort mergeSort = new MergeSort();
    mergeSort.sort(arr);
    System.out.println(Arrays.toString(arr));
}

输出结果为:

[1, 2, 3, 4, 5, 6, 7, 8]

另外一个示例是将一个字符串数组按照字典序排序:

public static void main(String[] args) {
    String[] arr = {"hello", "world", "java", "merge", "sort"};
    MergeSort mergeSort = new MergeSort();
    mergeSort.sort(arr);
    System.out.println(Arrays.toString(arr));
}

输出结果为:

[java, hello, merge, sort, world]

总结

归并排序是一种常用的排序算法,稳定而快速。本文详细讲解了该算法的实现细节和示例代码。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java 中归并排序算法详解 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • Shell脚本变量的只读 删除 类型及注释语法基础

    Shell脚本变量的只读、删除、类型及注释语法基础攻略 Shell脚本是一种用于自动化任务的脚本语言,变量是Shell脚本中非常重要的概念之一。在本攻略中,我们将详细讲解Shell脚本中变量的只读、删除、类型及注释语法基础。 变量的定义和赋值 在Shell脚本中,变量可以通过以下方式定义和赋值: variable_name=value 其中,variable…

    other 2023年8月15日
    00
  • Android中ViewPager的PagerTabStrip与PagerTitleStrip用法实例

    Android中ViewPager的PagerTabStrip与PagerTitleStrip用法实例 ViewPager是Android中常用的布局容器,用于实现滑动切换不同的页面。PagerTabStrip和PagerTitleStrip是ViewPager的两个常用子类,用于显示页面标题和提供导航功能。本攻略将详细介绍PagerTabStrip和Pag…

    other 2023年7月28日
    00
  • RSync文件备份同步 Linux服务器rsync同步配置图文教程

    我来详细讲解一下“RSync文件备份同步 Linux服务器rsync同步配置图文教程”。 什么是RSync? RSync是一个在类Unix系统中,用于同步文件和目录的实用工具。RSync通过使用Rsync算法(一种数据压缩算法)注重快速和最小化传输文件,并且允许选择性的更新文件。其他常见的使用情况就是用作备份服务来使用,除此之外,它还是一个优秀的网站、文件镜…

    other 2023年6月27日
    00
  • Git 常用命令整理

    Git 常用命令整理 1. Git 工作流程 Git 是一款分布式版本控制系统,采用的是以提交为基础的工作流程。当我们在项目中添加、修改和删除文件时,我们会将这些修改提交到本地 Git 仓库中。随后,通过 push 操作,将本地提交推送到远程 Git 仓库中。 2. Git 常用命令 2.1. 创建本地仓库 在本地创建一个新的 Git 仓库 $ git in…

    other 2023年6月26日
    00
  • Zend Framework教程之Zend_Layout布局助手详解

    Zend Framework教程之Zend_Layout布局助手详解 介绍 Zend_Layout是Zend Framework中的一个布局助手,它允许您在应用程序中定义和使用布局模板。布局模板是一个包含通用页面结构的文件,例如页眉、页脚和侧边栏。通过使用Zend_Layout,您可以将这些通用元素从每个页面中分离出来,使得页面的开发更加高效和可维护。 安装…

    other 2023年8月23日
    00
  • ios基础教程之常见的数组使用方法

    iOS基础教程之常见的数组使用方法 在iOS开发中,数组是一种常见的数据结构,用于存储同一类型的数据。常见的数组使用方法包括创建、添加、删除、查询和遍历等,本文将逐一为大家讲解。 一、创建数组 1.初始化空数组 使用以下语句可以创建一个空数组: NSMutableArray *array = [NSMutableArray array]; 2.初始化含有元素…

    other 2023年6月25日
    00
  • zip格式压缩文件辅助类(ZipHelper)

    概述 ZipHelper是一个zip格式压缩文件辅助类,可以帮助我们更方便地进行zip格式文件的压缩和解压缩。本文将为您提供一份完整攻略,介绍如何使用ZipHelper。 使用ZipHelper进行zip格式文件的压缩和解压缩 步骤1:引入ZipHelper类 在使用ZipHelper之前,需要将ZipHelper类引入到我们的项目中。可以将ZipHelpe…

    other 2023年5月5日
    00
  • Git 命令使用技巧提供工作效率

    请听我给您讲解“Git 命令使用技巧提供工作效率”的完整攻略。 Git 命令的使用技巧 提高工作效率的方法 使用 Git 命令进行版本管理,可以帮助我们更好地管理代码和协作开发。以下是一些 Git 命令使用的技巧,可以提高我们的工作效率。 使用别名 在使用 Git 命令时,我们可以设置别名来简化命令。比如我们可以为 git status 命令设置一个简短的别…

    other 2023年6月26日
    00
合作推广
合作推广
分享本页
返回顶部