下面这一章所讲解到算法将是最精彩和有趣的,涉及到的算法思路将会在你以后的代码中经常使用;讲解到的算法有归并排序、快速排序、堆排、桶排序。
1. 归并排序
归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治策略(divide-and-conquer):分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案“修补”在一起,即分而治之。
分而治之:
可以看到这种结构很像一棵完全二叉树,本文的归并排序我们采用递归去实现(也可采用迭代的方式去实现)。分阶段可以理解为就是递归拆分子序列的过程(依次递归拆分到只剩一个数据的时候,可以认为子序列达到有序)递归深度为 log2n,代码见 mergeSort 部分。
合并相邻有序子序列
再来看看治阶段,我们需要将两个已经有序的子序列合并成一个有序序列,比如上图中的最后一次合并,要将 [4,5,7,8] 和 [