首页 > 编程语言 >漫画:什么是归并排序算法?

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

时间:2023-03-17 22:45:19浏览次数:40  
标签:归并 递归 数组 漫画 一尘 排序 left

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

一、排序思想

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

image-20230212223830927

image-20230212223846275

image-20230212223859988

image-20210425154735224

image-20230212223930424

image-20230212223943221

分而治之: 分开来去治理

image-20230212223959308

image-20230212224011999

image-20230212224027406

归并即合并之意

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

image-20230212224048367

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

image-20230212224101284

image-20230212224127250

image-20230212224143819

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

image-20230212224158909

image-20230212224219964

二、代码

image-20230212224239292

image-20230212224255908

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

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

image-20230212225129976

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

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

image-20230212225157452

image-20230212225217123

三、时间复杂度

image-20230212225306699

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

image-20230212225329890

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

image-20230212225357296

image-20230212225412612

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

运行时间设为:T(N)

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

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

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

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

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

image-20230212225638608

image-20230212225651102

image-20230212225711161

image-20230212225727920

image-20230212225743067

image-20230212225758088

四、稳定性

image-20230212225950515

image-20230212230011647

image-20230212230040545

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

image-20230212230158300

标签:归并,递归,数组,漫画,一尘,排序,left
From: https://www.cnblogs.com/kubidemanong/p/17228494.html

相关文章

  • 漫画:什么是希尔排序算法?
    希尔排序(ShellSort)是以它的发明者DonaldShell名字命名的,希尔排序是插入排序的改进版,实现简单,对于中等规模数据的性能表现还不错一、排序思想前情回顾:漫画:什么是插入排......
  • 漫画:什么是堆排序算法?
    面试官:写一个堆排吧堆排是基于堆的一种排序算法,对于堆的了解,请看可以管理时间的二叉堆(如果对堆的插入和删除不清楚,强烈建议先看堆),今天我们聊聊堆排的思想,复杂度以及稳定......
  • 漫画:什么是快速排序算法?
    这篇文章,以对话的方式,详细着讲解了快速排序以及排序排序的一些优化。一禅:归并排序是一种基于分治思想的排序,处理的时候可以采取递归的方式来处理子问题。我弄个例子......
  • 【LeeCode】1122. 数组的相对排序
    【题目描述】给你两个数组,​​arr1​​​ 和 ​​arr2​​​,​​arr2​​​ 中的元素各不相同,​​arr2​​​ 中的每个元素都出现在 ​​arr1​​ 中。对 ​​arr1​......
  • 希尔排序
    【说明】希尔排序算法又称最小增量排序算法,其基本思想是:步骤1:构造一个步长序列delta1、delta2、..、deltak,其中delta1=n/2,后面的每个delta是前一个的1/2,deltak=1:......
  • python 排序算法
    冒泡排序算法比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。......
  • python中的列表排序
    #列表排序:'''#1.通过sort()方法排序,直接修改原列表defsort_list(list_data,rev=False):L.sort()#reverse默认False升序ifrev:L.sort(reverse=True......
  • 点集从上到下,从左到右进行Z字型排序(C++与python实现,自写)
    C++实现:voidPointDisgus(vector<Point>&Points){Pointt;intn=Points.size();inti,j;vector<Point>OutPoints;vector<Point>Points_......
  • 排序算法01随笔
    日月蹉跎现在是2023年03月17日八点五六分,心中想起一句话:“日月蹉跎人已将老功业未成”每个人心中都有个美好的梦,我们如何去实现它,是否能够坚持下去?又需要付出多少?望......
  • Vue.js 列表渲染-列表排序
    视频<!DOCTYPEhtml><html> <head> <metacharset="UTF-8"/> <title>列表排序</title> <scripttype="text/javascript"src="../js/vue.js"></script> </head>......