算法 · 合并排序

作者: 欧阳霖林 | 来源:发表于2019-05-21 22:05 被阅读3次

合并排序是一种稳定高效的递归排序,它是利用分而治之法的解决思路惊醒递归排序,合并排序非常稳定,时间复杂度始终都是 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的平方)。

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

相关文章

  • Java实现每日一道算法面试题(20):leecode23 合并

    1.算法题目 合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。 示例: 2.算法思路 算法思...

  • ARTS第五周2020620

    Algorithm 合并K个排序链表 合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。 示例...

  • 合并排序

    合并排序 算法介绍: 合并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法 的一个非常典型的应用。合...

  • Python 算法大全

    这个库涵盖了多种算法和数据结构的介绍,比如: 排序算法(冒泡排序、希尔排序、插入排序、桶排序、合并排序、快速排序、...

  • 合并K个排序链表【LeetCode:23】

    题目: 合并K个排序链表 合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。 示例: 输入: ...

  • Swift - LeetCode - 合并K个排序链表

    题目 合并K个排序链表 问题: 合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。 解题思路:...

  • LeetCode:合并K个排序链表

    合并K个排序链表(困难) 题目叙述: 合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。 示例...

  • Timsort详解

    原理介绍 TimSort是结合了合并排序(合并排序)和插入排序(插入排序)而得出的排序算法,它在现实中有很好的效率...

  • 23. 合并K个排序链表

    23.合并K个排序链表 合并k个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。 示例: 输入:[ 1-...

  • 合并排序和快速排序

    归属:分治法 算法复杂度: 合并排序:θ(nlogn)快速排序:一般是O(nlogn) 稳定性:合并排序稳定,快速...

网友评论

    本文标题:算法 · 合并排序

    本文链接:https://www.haomeiwen.com/subject/zcbszqtx.html