快速排序的递归和非递归解法

一般情况下,快速排序是所有排序算法中最快的一个,它被应用在很多代码框架中。由C. A. R. Hoare提出,平均时间复杂度为Θ(n log n)。快速排序采用分而治之策略,将一个序列分隔成两个序列。算法描述在很多书上网上都找得到,简单点就是选择一个基准元素,然后将比它小的排在前面,比它大的放在后面,重复这一过程直到所有有序。算法的定义就是一个递归的描述。实现的关键点是选择一个合适的基准元素,因为如果选择不够好,选择到序列中最大或者最小的,算法退化为复杂Θ(n * n)。

 

伪代码

 

非递归的实现方法借用堆栈实现,栈和队列是消除递归的常用方法。C#实现代码如下,C++、Java改写也很容易,因为C++、Java也提供了栈这一容器。

 

递归版本的实现跟我们通常接触的算法描述一样的。是一个STL的实现版本,关于STL推荐侯捷的《STL源码剖析》。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值