算法导论第八章思考题8-2.e答案,最后还是百度了答案,并不会,记录一下。
计数排序(稳定)
for i = 0 to k
c[i] = 0
for j = 1 to A.length
c[a[j]]++;
for i = 1 to k
c[i]+=c[i-1];
for j = A.length down to 1
b[c[a[j]]] = a[j]
c[a[j]]--
计数排序原址排序(不稳定)
for i = 0 to k
c[i] = 0
for j = 1 to A.length
c[a[j]]++;
//将A初始化为0向量。
//之后无需插入0元素
for j = 1 to A.length
A[j]=0;
//根据C中计数从后向前插入数据
//如果C[l]==C[l-1],说明l已经插入完毕或A中本来就没有l元素
for (int l=k;l>=1;l--)
while (C[l]!=C[l-1])
//这里C[l]--减去1是因为数组下标从0开始
A[(C[l]--)-1]=l;
网友评论