一般情况下,快速排序是所有排序算法中最快的一个,它被应用在很多代码框架中。由C. A. R. Hoare提出,平均时间复杂度为Θ(n log n)。快速排序采用分而治之策略,将一个序列分隔成两个序列。算法描述在很多书上网上都找得到,简单点就是选择一个基准元素,然后将比它小的排在前面,比它大的放在后面,重复这一过程直到所有有序。算法的定义就是一个递归的描述。实现的关键点是选择一个合适的基准元素,因为如果选择不够好,选择到序列中最大或者最小的,算法退化为复杂Θ(n * n)。
伪代码
非递归的实现方法借用堆栈实现,栈和队列是消除递归的常用方法。C#实现代码如下,C++、Java改写也很容易,因为C++、Java也提供了栈这一容器。
递归版本的实现跟我们通常接触的算法描述一样的。是一个STL的实现版本,关于STL推荐侯捷的《STL源码剖析》。