十大经典排序算法-归并排序算法详解

十大经典排序算法-归并排序算法详解一 什么是归并排序 1 概念归并排序 Mergesort 是建立在归并操作上的一种有效的排序算法 归并排序对序列的元素进行逐层折半分组 然后从最小分组开始比较排序 合并成一个大的分组 逐层进行 最终所有的元素都是有序的 2 算法原理这是一个无序数列 4 5 8 1 7 2 6 3 我们要将它按从小到大排序 按照归并排序的思想 我们要把序列逐层进行拆分序列逐层拆分如下然后从下往上逐层合并 首先对第一层序列 1 只包含元素 4 和序列 2 只包含元素 5 进行合并创建一个大序列 序列长度为两个小序列长度

十大经典排序算法
  • 十大经典排序算法-冒泡排序算法详解
  • 十大经典排序算法-选择排序算法详解
  • 十大经典排序算法-插入排序算法详解
  • 十大经典排序算法-希尔排序算法详解
  • 十大经典排序算法-快速排序算法详解
  • 十大经典排序算法-归并排序算法详解
  • 十大经典排序算法-堆排序算法详解
  • 十大经典排序算法-计数排序算法详解
  • 十大经典排序算法-桶排序算法详解
  • 十大经典排序算法-基数排序算法详解

一、什么是归并排序

1.概念

归并排序(Merge sort)是建立在归并操作上的一种有效的排序算法,归并排序对序列的元素进行逐层折半分组,然后从最小分组开始比较排序,合并成一个大的分组,逐层进行,最终所有的元素都是有序的

2.算法原理

3.算法实现

function sort(arr, startIndex = 0, endIndex = arr.length - 1) { // 递归结束条件:startIndex大于等于endIndex的时候 if (startIndex >= endIndex) { return; } // 折半递归 let midIndex = parseInt((startIndex + endIndex) / 2); sort(arr, startIndex, midIndex); sort(arr, midIndex + 1, endIndex); // 将两个有序的小数组,合并成一个大数组 merge(arr, startIndex, midIndex, endIndex); } function merge(arr, startIndex, midIndex, endIndex) { // 新建一个大数组 let tempArr = []; let p1 = startIndex; let p2 = midIndex + 1; let p = 0; // 比较两个有序小数组的元素,依次放入大数组中 while (p1 <= midIndex && p2 <= endIndex) { if (arr[p1] <= arr[p2]) { tempArr[p++] = arr[p1++]; } else { tempArr[p++] = arr[p2++]; } } // 右侧小数组已排序完毕,左侧小数组还有剩余,将左侧小数组元素依次放入大数组尾部 while (p1 <= midIndex) { tempArr[p++] = arr[p1++]; } // 左侧小数组已排序完毕,右侧小数组还有剩余,将右侧小数组元素依次放入大数组尾部 while (p2 <= endIndex) { tempArr[p++] = arr[p2++]; } for (let i = 0; i < tempArr.length; i++) { arr[i + startIndex] = tempArr[i]; } } let arr = [4, 5, 8, 1, 7, 2, 6, 3]; sort(arr); console.log(arr); 

二、归并排序算法特点

1.时间复杂度

归并排序算法每次将序列折半分组,共需要logn轮,因此归并排序算法的时间复杂度是O(nlogn)

2.空间复杂度

归并排序算法排序过程中需要额外的一个序列去存储排序后的结果,所占空间是n,因此空间复杂度为O(n)

3.稳定性

归并排序算法在排序过程中,相同元素的前后顺序并没有改变,所以归并排序是一种稳定排序算法


另外推荐一个开发者小工具网站,个人觉得里面的Json格式化功能很强大,报错很详细

https://tinyutil.com/

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/202746.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午11:24
下一篇 2026年3月19日 下午11:24


相关推荐

  • Windows | Linux杀死进程的相关命令「建议收藏」

    Windows | Linux杀死进程的相关命令「建议收藏」Windows|Linux杀死进程的相关命令

    2022年8月23日
    9
  • endnote修改参考文献格式为方括号(参考文献)

    Endnote修改参考文献格式1将参考文献除编号外的内容设置左对齐:1)菜单栏Edit-Outputstyles-选择一个要更改的参考文献格式进行更改2)弹出页面内选中Bibliography下的Layout![右上角Incertfield位置添加tab,右下角HangingIndent位置选择Allparagraphy]3)在word中endnote下点击箭头处更改缩进大小最终结果如图…

    2022年4月10日
    3.8K
  • 安装下载App_windows server 2022下载

    安装下载App_windows server 2022下载安装指南入门标题页3WindowsServerAppFabric安装和配置指南3版权3版权所有3简介3清单:规划安装4硬件要求4使计算机作好安装准备5本节内容5安装关键的Windows更新5安装Windows更新6安装修补程序6KB9804236安装.NETFramework6安装W…

    2022年10月17日
    5
  • 证书签名

    证书签名一、数字签名(digitalsignature)对指定信息使用哈希算法,得到一个固定长度的信息摘要,然后再使用私钥(注意必须是私钥)对该摘要加密,就得到了数字签名。所谓的代码签名就是这个意思。二、数字证书(digitalcertificate)证书生成开发者在申请iOS开发证书时,需要通过keychain生成一个CSR文件(CertificateSigningReque

    2022年4月28日
    81
  • CentOS7安装MySQL(完整版)

    CentOS7安装MySQL(完整版)在CentOS中默认安装有MariaDB,这个是MySQL的分支,但为了需要,还是要在系统中安装MySQL,而且安装完成之后可以直接覆盖掉MariaDB。1下载并安装MySQL官方的YumRepository[root@localhost~]#wget-i-chttp://dev.mysql.com/get/mysql57-community-release-…

    2022年4月28日
    32
  • git 拉取远程分支到本地(最简单方式)

    git 拉取远程分支到本地(最简单方式)Git 拉取远程分支到本地 最简单方式

    2026年3月17日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号