归并/合并排序
合并排序的主要思想是:把两个已经排序好的序列进行合并,成为一个排序好的序列。
我们可以把需要排序的数据分解成N个子序列,每个子序列都是只有一个元素的"有序序列",然后不断的合并成两个元素,四个元素,八个元素...的有序序列,这就是归并的过程。
例如,81726354:
(1)分成9172 6354
(2)把8172 分成 81 和72 把6354分成63和54
(3)81分成8和1,开始反向合并,合并为18, 同理72,63,54,也可以分解成单个合并为27,36,45
(4) 现在变为了 18, 27, 36, 45了,这个时侯,18 和27能合并了,合并为1278 同理36,合并为45 3456
(5)最后1278和3456合并为12345678.排序结束。
————合并时分别比较两个子序列的当前元素,取小的值放入新的序列中,不断继续直到两个子序列都归并进入和序列中
对n个长度为1的子数组归并需要n步,对n/2个长度为2的子数组进行归并需要n步..于是在logn层的递归中,每一层都需要O(n)的代价,该时间代价并不依赖于待排序数组中数值的相对位置。因此这也就是归并排序最佳,平均与最差的运行时间!