算法导论第三版习题7.1

来源:互联网 发布:大数据知识框架 编辑:程序博客网 时间:2024/06/05 10:32

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 - 13  count = 04  for j = p to r - 15    if A[j]<= x6      if A[i] == x7        count = count + 18      i = i + 19      exchange A[i] with A[j]10 if count == r - p + 111   return \lfloor (p + r)/2 \rfloor12 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
原创粉丝点击