要点
快速排序是一种交换排序。
快速排序最早是由图灵获得者Tony Hoare设计出来的,被列为20世纪十大算法之一。
算法思想
通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序的目的。
从上面的文字描述理解起来可能很费力,下面直接通过图解的方式来说明:
通过上面的图解分析我们知道第一轮排序结束,得到的序列为:12,1,3,4,5
并得到重合点的位置为3,然后分别对3左边的序列和右边的序列进行排序,直至整个序列都是有序的。
算法分析
快速排序算法的性能
空间复杂度
快速排序在每次分割的过程中,需要 1 个空间存储基准值。而快速排序的大概需要 Nlog2N次 的分割处理,所以占用空间也是 Nlog2N 个。
时间复杂度
- 快速排序的时间性能取决于快速排序递归的深度;
- 当数据有序时,以第一个关键字为基准分为两个子序列,前一个子序列为空,此时执行效率最差;
- 当数据随机分布时,以第一个关键字为基准分为两个子序列,两个子序列的元素个数接近相等,此时执行效率最好;
- 当数据随机分布时,以第一个关键字为基准分为两个子序列,两个子序列的元素个数接近相等,此时执行效率最好。
算法的稳定性
在快速排序中,相等元素可能会因为分区而交换顺序,所以它是不稳定的算法。
完整参考代码
|
|
运行结果12345排序前: 3 4 1 2 5base = 3: 2 1 3 4 5base = 2: 1 2base = 4: 4 5排序后: 1 2 3 4 5
参考资料
《大话数据结构》
http://www.cnblogs.com/jingmoxukong/p/4302718.html