基数排序代码混淆

时间:2013-08-26 22:11:34

标签: java c++ algorithm sorting

我对这个算法有疑问:

enter image description here

(幻灯片from here.

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];

有人可以详细说明我们将记录从[]移动到temp []的第3个for循环吗?

我知道在累积计数之后,它们应该是某种抵消。所以我们可以在temp []中的适当位置插入字母。

我只是不确定a [i] ++在那里做了什么。(&lt; -main question)我知道在count数组中引用字母的位置,但为什么呢我们也递增了这封信?我们换了字母了吗?感谢。

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

它看起来像一个错字: 它应该是:

temp[count[a[i]]++]

下一个元素应该进入下一个空白区域

步骤1中的

准备向type_i添加cnt_{i+1}次,这样可为type_i元素腾出空间......

step2是计数

的前缀

step3使用计数作为R索引指针,并将a中的所有元素发送到其最终目的地

在此步骤中保持不变:

  • count[ x ]指向可放置type_x元素的下一个空白区域(或输入中不再有x元素)