归并排序理解

稳定性:稳定的
是否是原地排序:非原地排序——因为每层的左右子树合并会消耗额外的空间,但不超过n。
时间复杂度:O(nlogn)
空间复杂度:O(n)——这导致在大规模数据上归并排序基本不用,因为比如100M数据还得再开辟100M内存空间,这恐怖。

**归并排序思想:**分而治之。有道是分久必合合久必分。这个归并排序也是先分再合的东西。

流程:
就是:
地盘我对半分
我再分
我再分





完事。

它像二叉树一样向下生长——先绽放左侧子树,直到终止条件——之所以说“绽放”,因为它的流程很像鲜花绽放,但它这绽放是每次砍半后,左半部作为子树接着再砍半,直到终止条件——1个元素——达到了左侧叶子节点,这样就停止绽放。以上是“分”,接着便开始了“合”,此时开始了收缩与枯萎——从左侧叶子节点开始自下而上的合并,合并一层左侧节点后就开始来到同层的右侧子树,此时右侧子树又开始绽放直到叶子节点,到达了叶子节点就不再绽放又开始收缩与枯萎,合并到上一层。然后此一层的左侧子树已经合并好,右侧子树此时也合并好了,那么左右子树开始合并,来到上一层,如果不是根节点,那么此时还有右子树还没有绽放与合并,等待右子树绽放与合并后又上升到更高层,此时如果为根节点,则算法结束,否则继续绽放合并飞升上一层直至根节点。

如下流程草图,从左子树叶子节点开始看,圆圈小标号是归并排序的“分”与“合”流程顺序——自下而上。

下图共5层——没有括号的1是一层,没有括号的2是1的上一层,4又是2的上一层,8是4的上一层,16是根节点——这些没有括号的数字代表数组(先用数组举例)有多少个元素。
特点:下层是上层砍半分出来的。

归并排序算法绽放收缩

上图流程简述:
圆括号1代表左侧子树终于达到了叶子节点——分到了一个元素——不能再分了。圆括号2是同层的右侧节点,然后这2个1合并(经过比较大小排序)成2——飞升到上一层圆括号3的指向,接着圆括号4的路径就要去同层的右子树了,同样去绽放与合并与飞升——圆括号5、6、7、8,这时就来到了4这一层,圆括号9指向同层的右子树4,继续绽放与合并——圆括号10-19,来到8这一层,同样右子树8要绽放与合并——因为和左侧一样的流程就不画了,略过。最终8这一层合并飞升到根节点16,算法结束,排序完成。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值