算法导论第三版习题7.1

7.1-1

(a) 首先 x=A[12]=11,i=0,j=1 ,此时我们比较 A[1]xA[1]>x ,故令 j=j+1=2
(b) 然后比较 A[2]xA[2]>x ,故继续令 j=j+1=3
(c) 比较 A[3]xA[3]<x ,故令 i=i+1=1 ,并交换 A[i] A[1] A[3] 得到新数组 A1=9,19,13,5,12,8,7,4,21,2,6,11}
(d) 重复上述过程,最后得到序列 A2={9,5,8,7,4,2,6,12,21,13,19,11} ,此时 i=7,j=11 ,交换 A[i+1] A[8]A[12] ,最终得到 A3={9,5,8,7,4,2,6,11,12,21,13,19} ,并返回 i+1=8

7.1-2

返回的 q=r
在算法中加入一个计数器即可:

PARTITION_1(A,p,r)
1  x = A[r]
2  i = p - 1
3  count = 0
4  for j = p to r - 1
5    if A[j]<= x
6      if A[i] == x
7        count = count + 1
8      i = i + 1
9      exchange A[i] with A[j]
10 if count == r - p + 1
11   return \lfloor (p + r)/2 \rfloor
12 exchange A[i + 1] with A[r]
13 return i + 1

7.1-3

在规模为 n 的子数组运行PARTITION需要进行n1次比较,每次比较时间复杂度为 Θ(1) ,所以整个算法的复杂度为 Θ(n)

7.1-4

将PARTITION算法的第4行换为 A[j]x 即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值