快速排序算法实施尾递归优化
来源:互联网 发布:瑞典帅哥成灾 知乎 编辑:程序博客网 时间:2024/05/21 06:51
昨晚面试官问如何从递归方面优化快排效率时提到了尾递归的优化,今天查了一下,长知识了。
void quickSort(SqList * list , int low ,int high){ int pivot; while(low<high) { pivot=Partition(list,low,high); quickSort(list, low,pivot - 1); //quickSort(list,low,pivot-1); 原递归调用 //quickSort(list,pivot+1,high); low = pivot+1; /*尾递归*/ } }
尾递归就是把当前的运算结果(或路径)放在参数里传给下层函数,深层函数所面对的不是越来越简单的问题,而是越来越复杂的问题——因为参数里带有前面若干步的运算路径。对于阶乘而言,越深并不意味着越复杂。
从时间和空间效率上看,尾递归和传统递归差不多。递归运算效率低主要是分支巨大,像阶乘这类单分支的递归,效率并不低。递归运算的深度和运算总量大致成指数关系,return多次并不会造成显著的性能损失。
一言以蔽之,传统递归越深,距离目标越近;尾递归越深,距离起点越远。
尾递归适用于运算对当前递归路径有依赖的问题,传统递归适用于运算对更深层递归有依赖的问题。
0 0
- 快速排序算法实施尾递归优化
- 快速排序的尾递归优化
- 快速排序,递归算法
- 快速排序递归算法
- 快速排序算法(递归)
- 快速排序递归算法
- 递归算法 快速排序
- 快速排序--递归算法
- 算法系列—快速排序及其优化(递归)
- 非递归快速排序算法
- 快速排序非递归算法
- 数组 快速排序 递归算法
- 快速排序非递归算法
- 快速排序(非递归算法)
- 递归算法之快速排序
- 快速排序 非递归算法
- 非递归快速排序算法
- 快速排序(递归算法)分析
- 【struts2】五大核心jar包 和 作用
- LeetCode解题报告--Merge Two Sorted Lists
- js中的for和for-in
- 使用selenium动态爬取
- Android中的ArrayAdapter
- 快速排序算法实施尾递归优化
- Android、Android Studio 操作记录
- 简单的对list进行分页
- 编译原理学习之运行时数据区的管理
- Oracle实现对查询结果每N条再次分组
- bootstrap3 文件上传插件fileinput中文说明文档
- php时间控制
- Leetcode NO.4 Median of Two Sorted Arrays
- 遍历 apr_table_t