您的位置:首页 > 产品设计 > UI/UE

算法-排序-快速排序(QuickSort)分析

2011-04-03 08:00 351 查看
题目:算法-排序-快速排序(QuickSort)分析

摘要:

此文介绍了快速排序的算法以及基本分析,最后总结。

此系列文均为方便日后重复粗略查看时不必翻看书籍。

http://jackaldire.com/200908/quick-sort-analysis/快速排序详细分析

给出了非常详细的PARTITION时各种扫描方式,以及介绍分治时尾递归的方式。

值得学习


简要介绍

快速排序通过划分数组为分别大于和小于key的两个连续部分,进而递归实现排序。

它的特点包括:

1.就地排序(inplace):不需要更多的内存空间

2.递归调用:思路简单

运行时间:

1.最坏情况




2.平均情况



而且隐含的常数因子很小。(何谓隐含的常数因子?…,TOBEIDTENDIFIED)

算法过程

QuickSort过程([2],P85)

QUICKSORT(A
,p
,r
)

1if
p
<r

2then
q
←PARTITION(A
,p
,r
)

3QUICKSORT(A
,p
,q
-1)

4QUICKSORT(A
,q
+1,r
)


QuickSort中用到的PARTITION过程([2],P85)

PARTITION(A
,p
,r
)

1x
←A
[r
]

2i
←p
-1

3for
j
←p
to
r
-1

4doif
A
[j
]≤x

5then
i
←i
+1

6exchangeA
[i
]↔A
[j
]

7exchangeA
[i
+1]↔A
[r
]

8return
i
+1







下图([2]图7-2)非常好的描述了PARTITION过程中数组元素的位置分布情况。





下面简单介绍一下PARTITION的循环中某一次的数据编排方式:

IF(Array[j]>x,

j++

ELSE

i++,j++,

exchangeArray[i]<->Array[j-1]


算法简单分析

算法简单分析中,将着重以传达意思为主,不会涉及严格的数学公式证明。

注意:每次划分n个元素的时间代价为thet(n).不论划分结果如何.

假设对n个元素排序所需时间为T(n)

最坏情况:

最坏情况为划分的两个区域分别包含n-1个和0个元素,

即:每次划分选取的基准都是当前无序区中关键字最小(或最大)的记录。

这样接下来的n-1个元素划分的时间为T(n-1)。

这样我们得到

T(n)=T(n-1)+thet(n)

看到这个公式,根据基本概念,可以知道其复杂度为thet(n平方).当然也可以通过[2]中的主定理证明。

思考:如果输入数据已经排好序,不论正序或者倒序,都将造成最坏情况。

最佳情况:

最佳情况为两个区域个包含n/2个元素,这样

T(n)=2T(n/2)+thet(n)

再由主定理复杂度为thet(nlgn)

思考1:mergesort的公式为T(n)=2T(n/2)+thet(n),其时间复杂度为thet(n*logn).为什么不直接使用mergesort?

因为mergesort需要太多的memory。

思考2:这里,我们一定要有这样的思维,目前我们碰到的mergesort,quicksort都出现了T(n)=T(an+b)+thet(n)类似的公式。

也就是说,有可能大部分简单的排序算法都可以通过分而治之(divideandconquer),分步法等简要直白的方式,将问题简化为此类公式。

此公式方便的打开了算法分析之门。

思考3:mergesort最大可能使用多少内存?TODO

我们知道,我们无法决定每次划分的情况。但是我们知道只要每次划分出现一定随机化分布,就会得到比较好的划分结果,至少不会最差。

我们通过每次选择参照的元素时,不直接选取最后一个,而是随机选取(randomsampling),就可以轻易达到效果。

同时,不用担心对原有PARTITION程序的乖动,我们只要在随机选取后,将随机样本与数组最后元素交换位置即可。

如下:

RANDOMIZED-PARTITION(A,p,r)

1.i<-RANDOM(p,r)

2.exchangeA[r]<->A[i]

3.PARTITION(A,p,r)

RANDOMIZED-QUICKSORT(A,p,r)

1.ifp<r

2.thenq<-RANDOMIZED-PARTITION(A,p,r)

3.RANDOMIZED-PARTITION(A,p,q-1)

4.RANDOMIZED-PARTITION(A,q+1,r)

算法进一步分析

TODO

总结

TODO。


参考文献:

[1].算法分析导论Section1.4平均情形分析,1.5例:快速排序的分析

[2].算法导论,CH,V2,Chapter7快速排序


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: