您的位置:首页 > 其它

快速排序

2014-04-25 15:32 302 查看
1. 问题描述



2. 算法思想

        跟归并排序类似,快速排序也是基于分而治之的思想。对典型子数组

 进行排序的分治过程如下: 

   分解:数组

被划分成两个(可能为空)的子数组



,使得

。下标


 在划分过程中得到。
   解决:通过递归调用快速排序,对子数组



排序。
   合并:不需要进行任何操作。因为两个子数组是就地排序的,将它们合并不需要操作:整个数组

已排序。

3. 伪代码实现

    快速排序:











    快速排序的随机化版本:











4. C++实现

    快速排序:










    快速排序的随机化版本:










5. 算法复杂度分析

    时间复杂度:



    空间复杂度:

   快速排序在系统内部需要一个栈来实现递归。若每次划分较为均匀,则其递归树的高度为

,故递归后需栈空间(即空间复杂度)为

;最坏情况下,递归树的高度为


,所需的栈空间(即空间复杂度)为



    快速排序为不稳定排序算法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息