5.快速排序
C% X3 F. S8 V/ m6 G1 I/ z快速排序的基本思想是把表中某元素作为基准,将表划分为大于该值和小于该值的两部分,然后用递归的方法处理这两个子表,直到完成整个表的排序。快速排序的比较次数为(n-1)+(n-2)+…+1=n(n-1)/2,移动次数最多也是n(n-1)/2。如果每次的基准元素刚好是表的中值,使表分为大小相等的两个子表,则比较次数为nlog 2 n;如果表已排好序,则移动次数为0。$ v2 M& G- U6 S0 s1 T, z8 Q8 q4 z( f
6.常用排序方法的性能比较如下表所示:
$ f5 t+ Q3 e t$ Y5 e/ t9 D常用排序方法的性能比较' l/ f% s( L, d, Z6 l3 ?
排序方法 平均时间 最坏情况的时间 辅助存储
! Z0 b3 C& Z! d4 b j; r冒泡法、直接选择法、直接插入法 O(n2 ) O(n2 ) O(1)
1 G3 F# s( c" e1 P快速排序 O(nlog2 n) O(n2 ) O(log2 n)
0 l! z# F5 w! }3 W! h! j6 L堆排序 O(nlog2n) O(nlog2 n) O(1)0 o5 F- s9 [/ `, V( {5 h
归并排序 O(nlog2 n) O(nlog2 n) O(n), t7 r: A0 ?, E' e# W9 @
注: 在上表中,我们将n(n-1)/2也记为O(n2 )。如果在待排序的表中含有多个码值相同的记录,经过排序后,这些记录的相对次序不变,则称这种排序方法是稳定的,否则是不稳定的。根据上述说法,可以看出直接插入法、归并法是稳定的;而直接选择法、冒泡法、快速排序法、堆排序法是不稳定的。+ [4 h& e# j" E9 v
七、检索# ~+ B' v/ \& ^' V7 t2 L
1.顺序检索+ [( w# W$ |3 a+ \0 a
检索又称为查找。顺序检索是将待查找的关键码值与线性表中个结点的关键码值逐一比较,直到找到所需的记录,检索成功;或者在表中找不到所需记录而检索失败。顺序检索不要求线性表事先排序。设线性表有n个元素,则最多检索次数为n,最少检索次数为1。6 \( }5 k8 t0 J, g
2.二分法检索
. J% _! v- ]' l! ]6 R+ O二分法检索要求线性表结点按关键排序且以顺序方式存储。在查找时,首先与表的中间位置上结点的关键值比较,若相等则检索成功;否则根据比较结果确定下一步在表的前半部或后半部中继续进行。二分法检索的效率较主动,设线性表有n个元素,则最多的检索次数为大于log 2 n的最小整数,最少的检索次数为1。 |