算法导论第三版习题8.2

8.2-1

(a)首先通过第4到第5行,数组 C={2,2,2,2,1,0,2} ,然后经过第7行到第8行,数组 C={2,4,6,8,9,9,11}
(b) 然后根据第10行到第12行,我们有首先 B[C[A[11]]]=B[6]=2 ,此时 C={2,2,2,2,8,9,9,10} 。然后经过循环可以分别得到 B[8]=3 , B[3]=1 , B[4]=1 , B[11]=6 , B[2]=0 , B[9]=4 , B[7]=3 , B[5]=2 , B[1]=0 , B[10]=6 。所以 B={0,0,1,1,2,2,3,3,4,6,6}

8.2-2

因为再给数组 B 填充数据时,我们是从数组A的最后一位开始往前循环的,而且每次给数组 B 中填充一个数据都会将该数在数组C中的计数减一,所以数组 A 中,该数之前如果还有与他相等的数,将被填充在数组B中该数的前一位,从而保证了具有相同值的元素在输出数组中的相对次序与他们在输入数组中的相对次序相同,即是稳定的。

8.2-3

该算法仍然是正确的,但此时它将不再是稳定的了。因为此时将从数组 A 的开始往后遍历,具有相同值得元素靠前的将被首先放在数组B的相对靠后的位置,从而破坏了稳定性。

8.2-4

ALGORITHM(A,k)
1 let C[0..b-a] be a new array
2 for i = 0 to k
3   C[i] = 0
4 for j = 1 to A.length
5   if x = A[j] - a <= b - a and x >= 0
6     C[x] = C[x] + 1
7 for i = 1 to k
8   C[i] = C[i] + C[i - 1]
9 return C[b-a]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值