算法 · 合并排序

合并排序是一种稳定高效的递归排序,它是利用分而治之法的解决思路惊醒递归排序,合并排序非常稳定,时间复杂度始终都是 O(n log n),它是一种自上而下的排序方式。

分而治之法:

Divide and conquer,缩写D&C;它的对事情的解决思路是将事情不断地缩小至最小,再将他们逐个击破,最后把问题合并起来解决。它的工作原理是:

1.找出简单的基线条件;2.确定如何缩小问题的规模,使其符合基线条件。

合并排序法:

该排序法充分运用到了分而治之的思考方式;在一组数组中,我们可以将数组的中间数作为基线条件,判断他们大于小于该基线条件,并且放到相应的大小数组中,进行下一次的递归。直到数组不能再次拆解。

图片来自《图解算法》

根据栈的数据结构,栈是一种后进先出(Last In First Out,FIFO)的数据结构,所以当栈达到最低端的时候,会优先返回上图中的[7,8]数组,再一层一层往上返回;因此也可以说合并排序是一种由下而上的排序法。再回到最开始所说的D&C思路,正好是最小化问题->解决->合并最小化问题的解决方案。而且这样做可以减少栈的调用,且合并排序非常稳定,最坏的情况下是O(n log n),相比起快速排序的最坏情况,因为快速排序极其依赖开发者对基线条件的选择,快速排序的最坏情况是O(n的平方)。

至于代码,没有代码!大家可以根据上述思路实际动手,可以加深理解。在实现递归条件时不要忘记临界点,以免无限堆栈照成死循环。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 合并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法的一个非常典型的应用。合并排序法是将两个(或两个...
    noonbiteun阅读 991评论 0 1
  • 本文的最新版本位于:https://github.com/iwhales/algorithms_notes转载请注...
    import_hello阅读 1,415评论 1 17
  • 通过前面的知识,我们已经知道,有序的数据在查找时有极大的性能提升。很多查找都基于有序数据,但并不是所有的结构都能像...
    大大纸飞机阅读 1,191评论 0 1
  • 一些概念 数据结构就是研究数据的逻辑结构和物理结构以及它们之间相互关系,并对这种结构定义相应的运算,而且确保经过这...
    Winterfell_Z阅读 5,900评论 0 13
  • 早上,娃5点多就起床了,玩了一通,实在没的玩了,就把娃放到床里面了,我拿玩具,刚一转身,娃一下子串出来,下巴着地,...
    water2017阅读 302评论 0 1