漫画:什么是归并排序算法?

归并排序是建立在归并操作的一种高效的排序方法,该方法采用了分治的思想,比较适用于处理较大规模的数据,但比较耗内存,今天我们聊聊归并排序

一、排序思想

一天,小一尘和慧能坐在石头上,眺望着远方

漫画:什么是归并排序算法?_第1张图片

漫画:什么是归并排序算法?_第2张图片

漫画:什么是归并排序算法?_第3张图片

漫画:什么是归并排序算法?_第4张图片

漫画:什么是归并排序算法?_第5张图片

分而治之: 分开来去治理

漫画:什么是归并排序算法?_第6张图片

漫画:什么是归并排序算法?_第7张图片

漫画:什么是归并排序算法?_第8张图片

归并即合并之意

慧能随手画了一张图解释了一下

漫画:什么是归并排序算法?_第9张图片

治:治理,这里就是将数组排序

漫画:什么是归并排序算法?_第10张图片

漫画:什么是归并排序算法?_第11张图片

漫画:什么是归并排序算法?_第12张图片

对于合并,其实非常简单,我只要不断地取出两个有序数组中比较小的那一个放在一个辅助数组中(通过比较),直到把两个有序数组中的元素取完

漫画:什么是归并排序算法?_第13张图片

漫画:什么是归并排序算法?_第14张图片

二、代码

漫画:什么是归并排序算法?_第15张图片

漫画:什么是归并排序算法?_第16张图片

一尘已经了解了师傅的固定套路了

既然是不断地分,那用递归就非常简单了,什么时候终止递归呢?递归到只有一个元素的时候。一尘随手写下了如下代码

漫画:什么是归并排序算法?_第17张图片

这里需要说明的是,center = (left + right) / 2 最好改成 center = left + (right - left) / 2,因为 left + right 有可能溢出。

很快,一尘写下了 merge 函数的代码

漫画:什么是归并排序算法?_第18张图片

漫画:什么是归并排序算法?_第19张图片

三、时间复杂度

漫画:什么是归并排序算法?_第20张图片

一尘想到:这个有点烧脑啊,元素个数为 n,运行时间是多少啊?递归,递归,再递归…

漫画:什么是归并排序算法?_第21张图片

师傅一下看出了一尘的心思

漫画:什么是归并排序算法?_第22张图片

漫画:什么是归并排序算法?_第23张图片

假设处理的数据规模大小为 N

运行时间设为:T(N)

① 当把 N 分为两半时,那么处理大小为 N/2 子数组花费时间为:T(N/2)

② 合并花费时间与数据规模成正比:N

所以处理规模大小为N的数据所需要花费两个大小为 N/2 的子数组加上合并花费的时间

即:T(N) = 2T(N/2) + N

对于 N = 1,T(1) = 1

漫画:什么是归并排序算法?_第24张图片

漫画:什么是归并排序算法?_第25张图片

漫画:什么是归并排序算法?_第26张图片

漫画:什么是归并排序算法?_第27张图片

漫画:什么是归并排序算法?_第28张图片

漫画:什么是归并排序算法?_第29张图片

四、稳定性

漫画:什么是归并排序算法?_第30张图片

漫画:什么是归并排序算法?_第31张图片

漫画:什么是归并排序算法?_第32张图片

此时太阳已经下山,一尘和师傅走在回家的路上,在路上,一尘脑子又想了一下归并排序的全过程

漫画:什么是归并排序算法?_第33张图片

更多排序算法文章

1. 漫画:什么是冒泡排序算法?

2. 漫画:什么是选择排序算法?

3. 漫画:什么是插入排序算法?

4. 漫画:什么是希尔排序算法?

5. 漫画:什么是归并排序算法?

6. 漫画:什么是快速排序算法?

7. 漫画:什么是堆排序算法?

8. 漫画:什么是基数排序算法?

9. 漫画:什么是外部排序?

10. 什么是计数排序?

11. 十大排序算法极简汇总篇

推荐阅读

下载破 2w+,在校生必看,《程序员内功修炼》第二版出炉

从双非到大厂,帅地写了一本原创PDF送给大家

一个帮你拿offer的校招网站

算法刷题路线(系统+全面)

作者简介:我是帅地,校招拿到过不少大厂offer,毕业去了腾讯研发岗,毕业半年整到人生第一个 100 万,目前专注于写大学规划 + 校招求职相关的内容,著有个人原创网站 PlayOffer。

你可能感兴趣的:(排序算法,算法,数据结构)