排序算法——归并排序
今天来讲讲排序算法中的归并排序,如果我所讲的与您所理解的有所出入,或者您觉得我讲的并不是很完美,轻点喷,您可以私信告诉我,并指出我的错误。
本文章算法演示使用的语言是JavaScript。也有使用伪代码的。

(1)归并算法原理
假设我们现在有一个“队伍”
[5,1,22,3,7,11,4,52]
你需要使用一个方法让他们自己觉得排序
如果你是一名“体育委员”你会怎么做?
把这个队伍分成两队left 和 right,让他们自己做对比,比完后两边再合并起来(merge)
我们知道最简单的比较方法就是将两个数进行互相比较:

其实归并算法就是把一串数组用递归的思想拆成一个一个单独的数,再使用数组下标0将两边的第一个数进行对比,如果对比后a 小,就把[a]slice出来,这样数组下标0指向的就是left中被slice掉a后的第二个数,再拿这个数去和right中的第一个数去比较,之后循环往复,直至数到最后一个数,我这么说是不是很抽象,那么我画一张图

left 和 right 两个数组是经过了递归排序后的数组
那么我们再将左右两个数组中下标为0的进行对比
如果a<b就用把left[0] slice 切出来

箭头中的1就是被切出来的,接下来数组下标0标到了left数组中的3,而right数组中的数组下标0还是在7
那么再将3和7进行比较,显然3和7,3还是小,那么把3再切出来

就这样循环往复直至最后一个。
(2)递归图
我们画一张图来理解归并排序的递归思想

通过图理解的话我们可以看到,实现归并的分递和归,就是先把数拆分开来,之后再一个一个比较排序合并concat成数组。
我们搞懂了其原理就要开始代码实现啦(最头疼的地方开始了)
(3)代码实现
先实现拆分数组,把他拆成left 和 right 即我们递归图中的递

上半部我们完成了,接下来我们将实现归,对数组大小进行判断后并起来

最后将两串代码连接起来

(4)总结
归并排序的思想其实也是递归,核心思想其实就是把a去和b比较,通过遍历的方式把数组中的每一个都比较排序一遍。文章到这就结束啦,本人水平有限只能讲解个大概,如果你有不同的想法可以私信我进行讨论,如果我有讲的不对的地方,请温柔的指出来,本人字比较丑,长久没写字了如果您看不懂我写的字,哈哈,那我也没办法。谢谢阅读本文章。

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】