排序算法杂谈(四) —— 快速排序的非递归实现

1. 前提

排序算法(七) —— 快速排序

排序算法杂谈(三) —— 归并排序的非递归实现

2. 快速排序与归并排序的递归

快速排序(Quick Sort)与归并排序(Merge Sort)虽然都采用了递归地思想,但是其递归地本质却有所不同。

  • 快速排序,手动划分,自然有序。
  • 归并排序,自然两分,手动合并。

快速排序,是先通过划分算法,将数组两分,划分的过程中,比主元(pivot)小的数字全部被划分到了左侧,比主元大的数字全部被划分到了右侧。

然后对两分的数组进行递归。当数组两侧的长度均小于等于1,那么数组就自然有序了。

归并排序,是将原数组二等分,直到被等分的数组长度小于等于1,那么被等分的数组就有序了,然后对这等分的数组进行合并。

所以说,快速排序与归并排序,正好代表了递归的两种典型,如果将递归的过程看做是一颗二叉树,那么:

  • 快速排序:下层递归的实现,依赖上层操作的结果。(只有父节点操作完成,才能对子节点进行递归)
  • 归并排序:上层递归的操作,依赖下层递归的结果。(只有子节点全部操作完成,才可以操作父节点)

3. 快速排序非递归实现的堆栈模型

猜你喜欢

转载自www.cnblogs.com/jing-an-feng-shao/p/9118376.html
今日推荐