java插入排序语法问题
我遇到了一种相当奇特的速记法:A[j+1] = A[j--]
这行似乎有两个操作:move A[j] right and decrement j
有没有可能把它分解成单独的步骤来帮助我理解速记
伪代码:
n=A.length
for i <- 1 to n-1
curr = A[i]
j = i - 1
while j >= 0 && A[j] > curr
A[j+1] = A[j--]
A[j+1] = curr
# 1 楼答案
因为在你的例子中,
j
总是小于A.length
和
如以下程序所示:
# 2 楼答案
当然可以:
注意
targetIndex
是在任何其他事情发生之前计算的——赋值运算符的左侧实际上是在右侧之前确定的然而,递减发生在赋值本身发生之前,甚至在评估右侧数组访问之前。您可以在这个示例代码中看到:
在这里,您可以看到
j
已递减,即使赋值本身无法发生事实上,如果我们使用
x[j + 10] = x[j ];
,也会发生同样的情况——换句话说,如果目标索引超出范围。到被发现的时候,减量已经发生了