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
填充数据时,我们是从数组
8.2-3
该算法仍然是正确的,但此时它将不再是稳定的了。因为此时将从数组
A
的开始往后遍历,具有相同值得元素靠前的将被首先放在数组
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]