麻烦解释递归调用的机制——快速排序

来源:百度知道 编辑:UC知道 时间:2024/05/31 06:48:00
我知道快速排序算法的空间复杂性是Θ(n),但由于对操作系统不是很了解,所以不是很清楚为什么是这个结果。劳烦老大们给详细地解释一下,先谢过了。
搞错了,应该是合并排序的递归算法。不是快速排序

这个算法在《算法设计技巧与分析》这本书上,作者是沙特的,由方世昌、吴永昶等译

书上会有,但找不到啊。以前C语言书上有简单的说过递归的运行机制,但那东西只能在那个时候忽悠,现在要分析算法,那点东西(连栈都没提到)根本不够。
希望各位帮忙,哪些书上会讲到这个东西。

快速排序
快速排序 Quick Sort
www.baicu.com
我们已经知道,在决策树计算模型下,任何一个基于比较来确定两个元素相对位置的排序算法需要Ω(nlogn)计算时间。如果我们能设计一个需要O(n1ogn)时间的排序算法,则在渐近的意义上,这个排序算法就是最优的。许多排序算法都是追求这个目标。

下面介绍快速排序算法,它在平均情况下需要O(nlogn)时间。这个算法是由C.A.R.Hoare发明的。

算法的基本思想

快速排序的基本思想是基于分治策略的。对于输入的子序列L[p..r],如果规模足够小则直接进行排序(比如用前述的冒泡、选择、插入排序均可),否则分三步处理:

分解(Divide):将待排序列L[p..r]划分为两个非空子序列L[p..q]和L[q+1..r],使L[p..q]中任一元素的值不大于L[q+1..r]中任一元素的值。具体可通过这样的途径实现:在序列L[p..r]中选择数据元素L[q],经比较和移动后,L[q]将处于L[p..r]中间的适当位置,使得数据元素L[q]的值小于L[q+1..r]中任一元素的值。

递归求解(Conquer):通过递归调用快速排序算法,分别对L[p..q]和L[q+1..r]进行排序。

合并(Merge):由于对分解出的两个子序列的排序是就地进行的,所以在L[p..q]和L[q+1..r]都排好序后不需要执行任何计算L[p..r]就已排好序,即自然合并。

这个解决流程是符合分治法的基本步骤的。因此,快速排序法是分治法的经典应用实例之一。

快速排序法是对冒泡排序法的一种改进,也是基于交换排序的一种算法。因此,被称为"分区交换排序"。
在待排序序列中按某种方法选取一个元素K,以它为分界点,用交换的方法将序列分为两个部分:比该值小的放在左边,否则在右边。形成"{左子序列}K{右子序列}"。再分别对左