7-1
a.
(1) 初始时,
x=A[1]=13,i=0,j=13
;
(2) 令
j=j−1=12,A[12]>x
,故继续令
j=j−1=11,A[11]<x
;令
i=i+1=1,A[1]≥x
。交换
A[1]和A[11]得到A1={6,19,9,5,12,8,7,4,11,2,13,21}
;
(3) 令
j=j−1=11,A[11]<x
;令
i=i+1=2,A[2]>x
。交换
A[2]
和
A[11]
得到
A2={6,2,9,5,12,8,7,4,11,19,13,21}
;
(4) 令
j=j−1=9,A[9]<x
;接下来令
i=3到9
,都有
A[i]≤x
,直到
i=10,A[i]=19>x
。此时
i>j
,故可以直接返回
j=9
,得到的序列为
A2={6,2,9,5,12,8,7,4,11,19,13,21}
。
b.
- 如果子数组以升序互不相同的元素排列,那么将重复
j=j−1
直到
j=1
,然后将进行一次
i=i+1=1
,然后就会直接返回
j=1
,
j
最小只能访问到
A[1] ,不会访问子数组以外的数; - 无论如何首先
j
肯定至少进行一次
j=j−1=r=12 ,然后因为 x=A[p] ,所以第一次 i=i+1=p ,然后就得停止。交换 A[j]和A[i] 之后 i<j ,所以至少还得进行一次 j=j−1 ,所以 j最大只能取到 r-1$。 - 因为至少会进行一次
i=i+1
,所以
i
最小只能访问
A[p] ;而且因为 A[j..r] 之间每个元素都大于等于 x ,所以重复i=i+1 时,最多只能使 i=j+1 ,所以 i 最大只能访问到A[r] 不会超出子数组 A[p..r] 的范围。
c.
根据上面b小问的分析即可得知。
d.
从算法第5行到第7行知,每次循环中
A[j+1..r]≥x
,从第8行到第10行可知,
A[p...j]≤x
。每次循环中,若
i<j
,则交换
A[i]与A[j]
,然后继续
j
的递减和
e.
QUICKSORT(A,p,r)
1 if p < r
2 q = HOARE-PARTITION(A,p,r)
3 QUICKSORT(A,p,q)
4 QUICKSORT(A,q+1,r)
7-2
a.
此时算法的随机性完全没有影响,算法的时间复杂度为 O(n2) 。
b.
PARTITION_1(A,p,r)
1 x = A[r]
2 i = p
3 t = r
4 j = p
5 while j <= t
6 if A[j] > x
7 exchange A[j] with A[t]
8 t = t - 1
9 else if A[j] < x
10 exchange A[i] with A[j]
11 i = i + 1
12 j = j + 1
13 else j = j + 1
14 return i and j
c.
RANDOMIZED-PARTITION_1(A, p, r)
1 i = RANDOM(p, r)
2 exchange A[r] with A[i]
3 return PARTITION_1(A, p, r)
RANDOMIZED-QUICKSORT(A, p, r)
1 if p < r
2 int[] q = RANDOMIZED-PARTITION_1(A, p, r)
3 if q[1] == p and q[2] = r
4 return
5 RANDOMIZED-PARTITION_1(A, p, q[1] - 1)
6 RANDOMIZED-PARTITION_1(A, q[2] + 1, r)
d.
直接将
Zij={zi,zi+1,⋯,zj}
中
zi
定义为数组A中第
i
小的元素中的一个,则
后面的分析是一样的。
7-3
a.
P(Xi)=1n ,所以 E[Xi]=P(Xi)=1n
b.
首先PARTITION过程的运行时间为
Θ(n)
,然后当主元为第
i
小的元素时,问题被分为规模分别为
c.
d.
e.
假设对于某个正常数
a
和足够大的
最后一步去适当的 a 使得
7-4
a.
算法前面和快速排序是一样的,调用PARTITION后,递归调用了左边的子数组;然后通过将 p=q+1 ,并经过循环,对右边的子数组进行了快速排序操作,与递归调用快速排序是一样的,所以能正确的对数组A进行排序。
b.
当数组本身就是按升序排列的,那么每次PARTITION操作后,左边的数组大小都只比原先的小一,所以一共会递归调用
n
次,即栈深度为
c.
TAIL-RECURSIVE-QUICKSORT(A, p, r)
1 while p < r
2 q = PARTITION(A, p, r)
3 if q <= (r+p)/2
4 TAIL-RECUISIVE-QUICKSORT(A, p, q-1)
5 p = q + 1
6 else
7 TAIL-RECURSIVE-QUICKSORT(A, q + 1, r)
8 r = q
7-5
a.
b.
当 n→∞ 时,上式等于 32 ,所以增加了 1/2 倍。
c.
三数取中法的好划分概率为
平凡实现为
当 n→∞ 时,
增加了 4/9 倍。
d.
不知道。。。
7-6
不会。。。