我使用此program here作为参考,以了解算法的实现方式。除了这一部分,我理解其中的大部分内容:
/*
* update all the buckets. If bucket[8] has 2,
* then there are 2 elements present till bucket 8
*/
for (i = 1; i < 10; i++)
bucket[i] = bucket[i] + bucket[i-1];
我不明白作者在那个循环中做了什么。有人可以解释一下发生了什么吗? 是的,我正在使用纸笔来看看发生了什么。我以为我可能会澄清那个
答案 0 :(得分:2)
此函数采用累计和,现在bucket [i]包含其自身和所有桶之前的累积和。注释意味着bucket [8] == 2意味着从0到8的总和= 2
编辑:我个人认为http://www.youtube.com/watch?v=Nz1KZXbghj8&noredirect=1有一个很好的基数排序解释。
答案 1 :(得分:1)
如果您对该行感到困惑,可以阅读有关计算排序的信息。理解abount radix排序的一个重要事情是它不能自行排序。有一个必须使用的子算法,它经常计算排序。
您提供的链接并不能说明这一点,在我看来这是一个重要的混乱。当你阅读
“在第一次通过期间,排序基于最低有效位的所有数据”
它不会告诉你如何。您可以使用任何其他稳定排序进行排序,代码会发生巨大变化。
所有这一切都要说,如果这是你唯一不理解的那一行,你就得到了基数排序。阅读有关计算排序以了解其工作原理的信息,并确保理解为什么它是作为基数排序子程序的好选择。