这两种算法都是正确的。您现在拥有的它也很稳定。
如果将最后一个更改为
for您所说的内容,它将停止保持稳定。
基本上,
C[i] = how many elements <= iexist在第三
for循环结束之后。因此
C[A[j]],您可以按排序顺序获得具有值的元素 的最后一个* 位置,具有值的元素的
第二个最后 位置,依此类推。这就是为什么要减少中的值的原因。
A[j]``C[A[j]] - 1*
A[j]``C
因此,如果您关心稳定性,则必须以相反的顺序开始迭代原始数组:这样,
x原始数组中具有值的最后一个元素将被放置在新数组中。反向迭代原始数组将确保将
x其放在所有其他等于的值
之后
x,从而使算法稳定。



