1. 前提
2. 快速排序与归并排序的递归
快速排序(Quick Sort)与归并排序(Merge Sort)虽然都采用了递归地思想,但是其递归地本质却有所不同。
- 快速排序,手动划分,自然有序。
- 归并排序,自然两分,手动合并。
快速排序,是先通过划分算法,将数组两分,划分的过程中,比主元(pivot)小的数字全部被划分到了左侧,比主元大的数字全部被划分到了右侧。
然后对两分的数组进行递归。当数组两侧的长度均小于等于1,那么数组就自然有序了。
归并排序,是将原数组二等分,直到被等分的数组长度小于等于1,那么被等分的数组就有序了,然后对这等分的数组进行合并。
所以说,快速排序与归并排序,正好代表了递归的两种典型,如果将递归的过程看做是一颗二叉树,那么:
- 快速排序:下层递归的实现,依赖上层操作的结果。(只有父节点操作完成,才能对子节点进行递归)
- 归并排序:上层递归的操作,依赖下层递归的结果。(只有子节点全部操作完成,才可以操作父节点)
3. 快速排序非递归实现的堆栈模型