| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 六、归并排序算法 -> 正文阅读 |
|
[数据结构与算法]六、归并排序算法 |
? ? ? ? ????????归并排序基于归并思想采用分治策略,先将数据利用递归分解成单独一个数,然后利用递归的回调机制进行排序合并,需要额外的开创一个大小与待排序的数据相同的空间用来填充,然后再将有序的序列替换掉待排序的数组的无序序列,是典型的利用空间来换时间的算法。 1、算法实现思想和过程图????????其实看完算法的实现图之后,对归并算法的思想应该有所理解了,代码实现的话需要一定的技巧和思路的,这里代码实现可以分为两个部分,一个是分解递归,另一个就是合并了。 ? ? ? ? 合并的时候就是利用递归的回调机制,当我们不断进行分解时,分解到最后数据单独存在的个体后,递归就开始回调,在我们提前创建好的临时数组上进行填充,直至填充结束。 ???????? ? ? ? ? 在此索引范围的临时数组temp内的数据是已经有序了的,这是需要将我们的待排数组arr中在此范围内的数据替换成临时数组的有序序列,如下图所示: ? ? 2、分解过程思路和代码? ? ? ? 分解过程可以用简单的递归实现,这里我们先进行左递归后,在进行右递归,直至数据为单独一个个体时,递归开始回调,进入合并函数merge。 ? ? ? ? ? 实现代码:
???????? 3、合并过程思路和代码? ? ? ? 合并过程思路可以分为三个简单的部分: ? ? ? ? (1)有序排序的合并:对两个待合并的数组进行元素判断,分别从最左边开始进行比较,当哪边的数据符合条件,则将该数据填充进temp数组中,随后temp数组的索引往后移一位,然后继续比较,填充,直至其中的一个或两个的待合并的数组的数据已经填充完了。
? ? ? ? (2)剩余数据的合并:先进行判断待合并数组中是否有数据还没填充进去temp数组中,如果有则将剩余数据依次填充进temp中即可。
? ? ? ? (3)序列替换:此时在范围 left-rigth 索引的temp数组中的数据是已经排序好了的,将arr数组中该范围的数据替换成temp数组的有序数据即可。 ?
4、归并排序算法实现代码
?测试结果截图: |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 23:43:22- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |