快速排序中的堆栈深度
来源:互联网 发布:乐变下载软件 编辑:程序博客网 时间:2024/06/05 00:35
快速排序的伪代码如下:
QUICKSORT(A, p, r) if p < r q <- PARTITION(A, p, r) QUICISORT(A, p, q-1) QUICKSORT(A, q + 1, r)可采用尾递归的方式减小堆栈的深度,即采用迭代控制结构替代第二次递归调用,尾递归在大多数的编译程序中都被采用。伪代码如下:
QUICKSORT(A, p, r) while p < r q <- PARTITION(A, p, r) QUICISORT(A, p, q-1) p <- q + 1尽管此时平均堆栈深度已减小,但最坏情况下堆栈深度仍为θ(n),如数组元素已有序的情况下进行快速排序。那如何减小最坏情况下的堆栈深度?
核心思想仍然是采用迭代控制结构替代递归调用。前一次的思想是执行PARTITION后,对数组的前一部分( A[p...q-1] )进行递归排序,对后一部分( A[q+1...r] )进行迭代控制运算。
假设每次执行PARTITION后,(q-1) - p + 1 : r-(q+1) +1 = a ( a > 0 ),则有
n * a ^ h = 1
=> h = - lgn / lga
- a < 1/2 => h < lgn
- a = 1/2 => h = lgn
- a > 1/2 => h > lgn
伪代码如下:
QUICKSORT(A, p, r) while p < r q <- PARTITION(A, p, r) if (q - 1) - p + 1 < r - (q + 1) + 1 QUICISORT(A, p, q-1) p = q + 1 else QUICKSORT(A, q + 1, r) r = q - 1
- 快速排序中的堆栈深度
- 快速排序中的堆栈深度
- 快速排序中的堆栈深度
- 算法导论7-4思考题-快速排序中的堆栈深度-尾递归技术
- 排序中的快速排序
- std 中的快速排序
- java中的快速排序
- js中的快速排序
- 快速排序中的套路
- js中的快速排序
- 快速排序 算法 详解 及 深度优化
- 快速排序算法的递归深度
- 快速排序算法的递归深度
- 快速排序递归非递归队列堆栈实现
- Java-快速排序,java.lang.StackOverflowError堆栈溢出异常处理
- 堆栈排序
- 排序堆栈
- asp.net中的快速排序
- ARM架构手机处理器全面大汇总
- VMware Tools installation cannot be started manually while Easy Install is in progress.
- MATLAB中的一些小技巧
- STM32之CAN---接收管理分析
- Porject Euler problem 56
- 快速排序中的堆栈深度
- 安装ADT时错误解决办法
- 实现JS数组的深拷贝
- Qt中的new与delete
- 内存缓存__discuz缓存机制(内存缓存,memory())
- Oracle Long类型使用事项
- 在Struts的action中访问serverle的API
- 项目控制的攘外与安内
- pojo和javabean的区别