这个java增量后操作符在做什么?

这个java增量后操作符在做什么?,java,Java,下面是一段基数排序实现的Java代码: aux[count[a[i]]++] = a[i]; 为什么要使用后增量运算符?为什么不辅助[计数[a[i]]+1]?后增量是否只是将计数[a[i]]中的值增加1并存储在那里 radixSort.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++)

下面是一段基数排序实现的Java代码:

aux[count[a[i]]++] = a[i];
为什么要使用后增量运算符?为什么不辅助[计数[a[i]]+1]?后增量是否只是将计数[a[i]]中的值增加1并存储在那里

radixSort.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];
int N=a.length;
int[]计数=新的int[R+1];
对于(int i=0;i
后增量是否只是将计数[a[i]]中的值增加1并存储在那里

是的,没错。该语句有两个副作用:一个是修改
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]
的元素,因为这里将
++
用作后期增量。

辅助[count[a[i]++]=a[i]表示:

首先,获取[i]
值,并将其用作计数的索引。然后将该值用作
aux
数组中的索引,并将
a[i]
的值放在其所在位置。然后为
1
增加位置
count[a[i]]
上的值

它是这样的:

aux[count[a[i]]] = a[i];
count[a[i]] = count[a[i]] + 1;
但是更短

你也有这个:
aux[++count[a[i]]=a[i]。
这将从
count[a[i]]
1
的第一个增量中获取值,然后将其用作
aux
数组中的索引,因此现在我们将其搜索为:

count[a[i]] = count[a[i]] + 1;
aux[count[a[i]]] = a[i];
正如您所看到的,
aux[count[a[i]]+1]
aux[count[a[i]+]
不同,因为它不会为
a[i]
中的1存储
a[i]
中的1的增加值,并且它将从
aux
中获取索引
a[i]+1
,但
aux[count[a[i]+]

aux[count[a[i]]+1]
aux[++count[a[i]]]
类似,但区别在于您没有在
count[a[i]
中增加值