对于栈深度的定义:
编译器通常使用栈来存储递归执行过程中的相关信息,包括每次递归调用的参数等。最新调用的信息存在栈的顶部,而第一次调用的信息存在栈的底部。当一个过程被调用时,其相关信息被压如栈中,当它结束时,其信息被弹出。栈深度是在一次计算中会用到的栈空间的最大值。
对于快速排序,假设数组参数的传递是用指针来指示的,所以每次过程调用只需要O(1)的栈空间。
去除尾递归的快速排序伪代码如下:
TAIL-RECURSIVE-QUICKSORT(A, p, r)
while p < r
q = PARTITION(A, p, r)
TAIL-RECURSIVE-QUICKSORT(A, p, q-1)
p = q + 1
对于该种伪代码实现的去除尾递归的快速排序过程,其栈深度最坏情况下仍然为 Θ