首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >这个java post增量操作符在做什么?

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

Stack Overflow用户
提问于 2016-05-08 07:12:49
回答 2查看 114关注 0票数 2

因此,有一段基排序实现的Java代码如下所示:

代码语言:javascript
运行
复制
aux[count[a[i]]++] = a[i];

为什么使用post增量操作符?为什么不是辅助[count[ai]+1]?post增量是简单地将count[ai]中的值增加1并存储在那里吗?

radixSort.java

代码语言:javascript
运行
复制
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];
EN

回答 2

Stack Overflow用户

发布于 2016-05-08 07:18:13

post增量是简单地将count[ai]中的值增加1并存储在那里吗?

是的,完全正确。该语句有两个副作用:一个是对aux元素的修改,另一个是对count中元素的修改。

就我个人而言,我会避免这样写--我可能会写:

代码语言:javascript
运行
复制
// 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]]的元素,在增量之前,因为++在这里被用作后增量。

票数 3
EN

Stack Overflow用户

发布于 2016-05-08 07:18:21

这个aux[count[a[i]]++] = a[i];的意思是:

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

它是这样的:

代码语言:javascript
运行
复制
aux[count[a[i]]] = a[i];
count[a[i]] = count[a[i]] + 1;

但更短。

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

代码语言:javascript
运行
复制
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]值,它将从aux中获取索引a[i] + 1,但aux[count[a[i]]++]将使用a[i]的索引。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37097240

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档