算法思路
- 把 n 个记录看成 n 个长度为 l 的有序子表
- 进行两两归并使记录关键字有序,得到 n/2 个长度为 2 的有序子表
- 重复第 2 步直到所有记录归并成一个长度为 n 的有序表为止。
原理
归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,其中的分治法是常用的一种解决问题的方法,现在流行的云计算其实就是一种分治法的应用。
归并算法详解
归并排序的中心思想:申请一个空序列,将两个已经排序好的序列,合并成一个排序的序列
假设:
序列A:3 4 7 9
序列B:2 6 8
序列C:空
合并思路是:先申请一个序列,将指针分别指向3和2,这时候进行比较,3大于2,所以把2放到序列C,序列B指针后移到6,这时候序列A的3小于6,把3放到序列C,A序列指针后移
4小于序列B的6,把4放到序列C,依次类推。。。直到最后只剩下序列A中的9,把9合并到序列C,完成归并排序
分治法
字面解释就是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个思想在实际工作中的作用非常大,特别是处理大数据和做复杂运算的时候。
假设:无序序列:4 3 7 9 2 8 6
将数组分成长度为2,并使每个子数组有序:[3, 4] [7, 9] [2, 8] [6]
然后分别两个一对进行归并,然后就可以得到最终的有序序列:2 3 4 6 7 8
缺点
归并排序的一个缺点是它需要存储器有另一个大小等于数据项数目的数组。如果初始数组几乎占满整个存储器,那么归并排序将不能工作,但是如果有足够的空间,归并排序会是一个很好的选择。
参考
常见排序算法 - 归并排序 (Merge Sort)_有图
经典排序算法 - 归并排序Merge sort
详解PHP归并排序的实现
大数据算法:对5亿数据进行排序