推出一个新系列,《看图轻松理解数据结构和算法》,主要使用图片来描述常见的数据结构和算法,轻松阅读并理解掌握。本系列包括各类堆、各类队列、各类列表、各类树、各类图、各类排序等等几十篇的样子。mysql
合并排序也叫归并排序,它的主要思想是分治法,把待排序序列分为若干有序子序列,而后将两个或两个以上的有序子序列进行合并,获得一个新的完整的有序序列。因此首先得先对子序列进行排序,获得有序子序列,而后再使序列段之间有序。算法
既然是分治法,那么就涉及到分和治。分,即递归地将序列分红小序列再求解;治,即递归地将分红的小序列合并到一块儿。sql
假设咱们有以下8个元素,分别为84,25,59,71,62,16,34,45
,如今进行合并排序。网络
先将0到3分为子序列,4到7分为子序列,数据结构
对于0到3子序列,继续分为0到1的子序列,2到3的子序列,并发
对于0到1子序列,继续分为0子序列和1子序列,而后对这两个子序列进行合并,两个子序列都只有一个元素,一个元素的序列能够当作是有序序列,咱们把它们合并成有序序列,25小,先提出来,机器学习
而后是84,数据结构和算法
排好序的序列放回原来序列中,因而完成0和1子序列的合并操做,01变成有序子序列。接着处理2子序列和3子序列,学习
59比较小,先提出来,.net
而后是71,
排好序的序列放回原来序列中,因而完成2和3子序列的合并操做,23变成有序子序列。
接下去开始合并01有序子序列和23有序子序列,01序列中最小的元素25小于23序列中最小的元素59,因而25先提出来,
01序列剩余元素中最小元素84大于23序列中最小的元素59,因而59提出来,
84与71比较,提出71,
最后提出84,
因而完成0到3的合并,0到3变为有序序列,放回原序列中。接下去处理4到7的子序列,
继续分为4到5的子序列,6到7的子序列,
对于45子序列,继续分为4子序列和5子序列,而后对这两个子序列进行合并,两个子序列都只有一个元素,一个元素的序列能够当作是有序序列,咱们把它们合并成有序序列,16小,先提出来,
而后是62,
排好序的序列放回原来序列中,因而完成4和5子序列的合并操做,45变成有序子序列。接着处理6子序列和7子序列,
34较小,先提出来,
而后是45,
排好序的序列放回原来序列中,因而完成6和7子序列的合并操做,67变成有序子序列。
接下去开始合并45有序子序列和67有序子序列,45序列中最小的元素16小于67序列中最小的元素34,因而16先提出来,
45序列中剩余元素中最小元素62大于67序列中最小的元素34,因而34提出来,
62与45比较,提出45,
最后提出62,
因而完成4到7的合并,4到7变为有序序列,放回原序列中。如今咱们已经完成了0到3的有序序列和4到7的有序序列,接下去开始合并03序列和47序列,
03序列最小元素25与47序列最小元素16比较,选出小的16,
继续比较两个序列最小的元素,25与34比较,选出25,
接着59与34比较,选出34,
59与45比较,选出45,
59与62比较,选出59,
71与62比较,选出62,
而后剩下的71和84不用比较了,由于47序列已经没有元素了,直接按照原来顺序提出来便可,
最终完成排序。
-------------推荐阅读------------
个人开源项目汇总(机器&深度学习、NLP、网络IO、AIML、mysql协议、chatbot)
跟我交流,向我提问:
欢迎关注: