关于这个问题,我有个问题:
(幻灯片拍摄从这里开始。)
int N = a.length;
int[] count = new int[R];
for (int i = 0; i < N; i++)
count[a[i]+1]++;
for (int k = 1; k < 256; k++)
count[k] += count[k-1];
for (int i = 0; i < N; i++)
temp[count[a[i]++]] = a[i]
for (int i = 0; i < N; i++)
a[i] = temp[i];
有人能详细介绍一下第三个for循环吗?我们将记录从a[]转移到temp[]?
我知道,在我们累积计数后,它们应该是某种抵消。这样我们就可以在temp[]中适当的位置插入字母。
我只是不知道ai++在里面做什么。(<-问题)我知道在计数数组中引用字母的位置,但是为什么我们也要增加字母呢?我们换信了吗?谢谢。
感谢你的帮助。
发布于 2013-08-26 22:21:48
它看起来像是一个错误:应该是:
temp[count[a[i]]++]
下一个元素应该进入下一个空空间。
在step1准备将type_i
计数添加到cnt_{i+1}
中,这样可以为type_i
元素留出空间.
step2是计数的前缀
step3使用计数作为R
索引指针,并将a
中的所有元素发送到其最终目的地。
这个步骤保持不变:
count[ x ]
指向可以放置type_x
元素的下一个空空间(或者输入中不再有x
元素)。https://stackoverflow.com/questions/18453886
复制相似问题