[精华集成] 归并排序 图解原理 一步到位

         归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法Divide and Conquer)的一个非常典型的应用。归并排序的核心思想是将两个有序的数列合并成一个大的有序的序列。通过递归,层层合并,即为归并。

分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之

         归并操作的工作原理

第一步:申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列;
第二步:设定两个指针,最初位置分别为两个已经排序序列的起始位置;
第三步:比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置;
重复第三步,直到某一指针超出序列尾,将另一序列剩下的所有元素直接复制到合并序列尾。

图解

归并排序
归并排序
         归并排序是稳定排序,它也是一种十分高效的排序,能利用完全二叉树特性的排序,性能良好。java中Arrays.sort()采用了一种名为TimSort的排序算法,就是归并排序的优化版本。从上文的图中可看出,每次合并操作的平均时间复杂度为O(n),而完全二叉树的深度为|log2n|。总的平均时间复杂度为O(nlogn)。而且,归并排序的最好,最坏,平均时间复杂度均为O(nlogn)。

TimSort算法的详解链接:
https://www.jianshu.com/p/10aa41b780f2

本文内容参照 : 作者: dreamcatcher-cx
链接地址:
https://www.cnblogs.com/chengxiao/p/6194356.html

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值