我对计数排序算法有疑问。我正在阅读它,并在一个例子中逐步分析它的代码,但我不认为我理解一个小细节..如果我理解正确,为了算法工作,你根本不应该使用Sorted数组的索引0,或者只是算法的这种实现,它没有使用它?
以下是实施的示例:
list_1 = ' '.join(list_1)
所以我只是问这是一个很好的例子,为了使Counting排序工作,排序的数组总是与原始数组的大小+ 1和索引0不会被修改?
答案 0 :(得分:0)
您的实施中存在错误;即,将B初始化为大小为n,然后将地址B [n]初始化。
无论如何,如果你想从B中的索引0开始,那么你需要改变:
B [C [A [j]]] = A [j];
到
B [C [A [j]] - 1] = A [j];
以及随后的for循环
for(i = 1; i< n; i ++)
您从B中的索引1开始的原因是您将索引处的最小元素放置为要放置的该元素的剩余数量的计数 - 也就是说,最后一个最小元素放置在指数1。