介绍
归并排序:归并字面意思“回归 ”“合并 ”,把有序的两个或者多个序列合并为一个序列。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。那么什么是分治法呢?
分治法
分治法:将原问题分解为几个规模较小但类似于原问题的子问题,递归的求解这些子问题,然后在合并这些子问题的解来建立原问题的解。
分治模式在每层递归都有三个步骤:
- 分解:把原问题分解若干子问题;
- 解决:把若干子问题解决;
- 合并:把若干问题的解合并。
归并分析
归并排序的核心思想采用分治法。我们通过一个例子来深入的认识。比如现在有一组数 [30, 55, 65, 40, 25, 80, 26, 35],对这些数通过分治法的思想解决排序,遵循三个原则:
- 分解:把需要排序的一组数分解为若干序列,例如[30, 55] , [65, 40] ……;
- 解决:把分解的若干序列按照规则排序,例如从小到大:[30, 55] , [40 65]……;
- 合并:在把若干有序子序列合并为一组数,就完成我们的排序。
下面我们将通过图解来理解这个过程:
代码实现
实现归并排序,这里分为两步,方便理解