算法导论学习笔记-第7章 快速排序

7.1 快速排序的描述

快速排序是基于divide-and-conqueue模式的。

 

 

快速排序算法的关键是PARTITION过程,它对子数组A[p..r]进行就地重排:

 

 

 

QQ截图未命名

 

在函数PARTITION中的每一次循环中,对于任意数组下标k,有

1) 如果p<= k <=i,则A[k] <= x;

2) 如果i+1 <= k <=j-1,则A[k] > x;

3) 如果k = r,则A[k] = x。

 

PARTITION在子数组A[p..r]上的运行时间为θ(n),其中 n=r-p+1

 

 

7.2 快速排序的性能

最坏情况划分

快速排序的最坏情况划分行为发生在划分过程产生的两个区域分别包含n-1个元素和0个元素的时候。假设算法的每一次递归调用中都出现了这种不对称划分,则算法的运行时间可以递归地表示为:

T(n) = T(n-1) + T(0) + θ(n) = T(n-1) + θ(n)

利用代换法,可以证明T(n) = θ(n^2)

最佳情况划分

在PARTITION可能做的最平衡的划分中,得到的两个子问题的大小都不可能大于n/2。在这种情况下,快速排序的运行时间为:

T(n) <= 2T(n/2) + θ(n)

根据主定理,该递归式的解为T(n) = O(nlgn)

平衡的划分

任何一种按常数比例进行的划分都会产生深度为θ(n)的递归树,其中每一层的代价为O(n),因而,每当按常数比例进行划分时,总的运行时间都是O(nlgn)。

 

7.3 快速排序的随机化版本

 

 


7.4 快速排序分析

快速排序最坏情况运行时间为θ(n^2)

利用RANDOMIZED-PARTITION,快速排序期望的运行时间为O(nlgn)。

 

 

 

快速排序的c代码:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值