美文网首页程序猿阵线联盟-汇总各类技术干货程序员
归并排序精讲——分治算法的初步应用

归并排序精讲——分治算法的初步应用

作者: 航哥很帅 | 来源:发表于2018-09-22 10:10 被阅读25次

归并排序,是一种使用分治策略的算法,主要分为两种,一种是自顶向下,一种是自底向上。这两种排序一般都是使用递归方法实现。对于初级程序员来说,虽然递归这个过程理解起来有些难度,但只要过程能够梳理清楚,一般情况下归并排序还是很容易理解的。

归并排序是一种O(nlogn)级别的归并排序,效率比不上快速排序,但对于一般用于对总体无序,但是各子项相对有序的序列,还是有一定用途的。

自顶向下

对于自顶向下的归并排序,主要过程是先将一个待排序的序列进行等半划分,然后再使用递归策略,对刚刚划分出的待排序的子序列进行等半划分,直到划分到底(每个子序列只有一个元素),这就是分的过程。详细图示如下:

归并排序-自顶向下-分

然后,在从底部开始,向上对两个子序列进行归并,得到一个有序的子序列,直到归并到顶,这就是治的过程。详细图示如下:

归并排序-自顶向下-治

治的过程中,每两个待归并的数组,需要将每个元素进行比较,合并成一个有序的数组,这个归并过程如下图所示:

归并排序-归并过程

在归并的过程中,有一个重要的操作需要你注意,就是要重新申请一段空间,用于存放已经排好序的数组。这样就导致归并排序的空间复杂度不是太好。但现在计算机的内存空间可以说是非常廉价,所以当前这已经不算是一个太大的劣势。

自底向上

对于自底向上的归并排序,基本思路和自顶向下是没有什么区别的,最大的区别就是:分和治是同步进行的,每分一步,就把分出来的序列治理好。而且分的过程就是从最小的单元开始分,直到分治出整个待排序的序列。整个排序的示意图如下:

归并排序--自底向上

总结

以上就是两种归并排序的详细过程,还有一个重点需要说明的情况就是:归并排序是一种稳定排序,不管待排序序列是几乎有序的数组,还是有很多重复的元素,对归并排序的时间复杂度几乎都没有什么影响。而之前我们讲的快速排序,则完全是另一种情况,感兴趣的读者可以看看我之前写的文章。

我是徐建航,这是我写的第54篇文章,欢迎你加入007社群,七天写一篇,一起写七年,七年之后一起去南极。

相关文章

  • 归并排序精讲——分治算法的初步应用

    归并排序,是一种使用分治策略的算法,主要分为两种,一种是自顶向下,一种是自底向上。这两种排序一般都是使用递归方法实...

  • Java常见排序算法详解——归并排序

    概念: 归并排序Merge Sort归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法的典型应用。...

  • python实现归并算法

    归并排序是采用分治法的一个非常典型的应用,另一个可以采用分治法的是快速排序,归并算法比快速排序速度稍低。归并排序的...

  • 排序算法之归并排序

    介绍 归并排序,是创建在归并操作上的一种有效的排序算法。该算法是采用分治法的一个非常典型的应用,且各层分治递归可以...

  • python 实现各种排序算法

    总结了一下常见集中排序的算法。 归并排序 归并排序也称合并排序,是分治法的典型应用。分治思想是将每个问题分解成个个...

  • python 实现各种排序算法!

    总结了一下常见集中排序的算法。 归并排序 归并排序也称合并排序,是分治法的典型应用。分治思想是将每个问题分解成个个...

  • 排序算法之归并排序

    归并排序(Merge Sort) 归并排序是利用归并的思想实现排序的方式,该算法采用的是经典的分治算法 归并排序过...

  • 数据结构与算法第八讲 - 排序(下)

    本讲内容 归并排序快速排序 两种排序算法都是使用分治思想分治是一种解决问题的处理思想,递归是一种编程技巧 归并排序...

  • 归并排序

    一、定义 归并排序分为两种: “自顶向下”的归并排序。该类归并排序是算法设计中“分治”思想的典型应用。其实就是将数...

  • 常见的排序算法②

    归并排序   归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法的一个非常典型的应用。将已有序的子...

网友评论

    本文标题:归并排序精讲——分治算法的初步应用

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