因此,有一段基数排序实现的 Java 代码,如下所示:
aux[count[a[i]]++] = a[i];
为什么要使用后增量运算符?为什么不aux[count[a[i]]+1]?后增量是否只是将 count[a[i]] 中的值增加 1 并将其存储在那里?
基数排序.java
int N = a.length;
int[] count = new int[R+1];
for (int i = 0; i < N; i++)
count[a[i]+1]++;
for (int r = 0; r < R; r++)
count[r+1] += count[r];
for (int i = 0; i < N; i++)
aux[count[a[i]]++] = a[i];
for (int i = 0; i < N; i++)
a[i] = aux[i];
最佳答案
Is the post increment simply to increment the value in count[a[i]] by 1 and store it there?
是的,完全正确。该语句有两个副作用:其一是对 aux
的元素进行修改。 ,另一个是对 count
中元素的修改.
就我个人而言,我会避免这样写 - 我可能会写:
// We don't use i other than to index into a, so use an
// enhanced for loop instead
for (int value : a)
{
aux[count[value]] = value;
count[value]++;
}
注意,即使更改为count
不需要,aux[count[a[i]]+1]
不会做同样的事情 - 因为 aux[count[a[i]]++]
引用 aux
中的元素索引 count[a[i]]
,在增量之前,因为 ++
此处用作后增量。
关于java - 这个java后增量运算符在做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37097240/