数组在方括号中增加元素意味着什么?

Roh*_*n B 2 c++ arrays

在下面的merge-sort算法中,在第3个定义中,first while循环有:

a[k++] = (a[j] < b[i]) ? a[j++] : b[i++].
Run Code Online (Sandbox Code Playgroud)

我理解RHS是一个条件语句,声明如果满足第一个操作数,那么我们应该执行第二个操作数,如果不满足,我们应该执行第三个操作数.

什么元素做a[k++],a[j++]b[i++]对应?

根据我的理解,它应该意味着在每个连续的while循环中,元素递增.

即.与初始化值(开始i=1,j=m+1,k=1第一个),而循环,接下来的while循环将包括(i=2,j=m+2,k=2),等等.

这是整个算法:

# split in half
m = n / 2

# recursive sorts
sort a[1..m]
sort a[m+1..n]

# merge sorted sub-arrays using temp array
b = copy of a[1..m]
i = 1, j = m+1, k = 1
while i <= m and j <= n,
    a[k++] = (a[j] < b[i]) ? a[j++] : b[i++]
    ? invariant: a[1..k] in final position
while i <= m,
    a[k++] = b[i++]
    ? invariant: a[1..k] in final position
Run Code Online (Sandbox Code Playgroud)

mrk*_*rks 11

a[k]获取k数组的第th个元素a.

k++增加值k,但返回先前的值.

因此,a[k++]返回a[k]随的副作用k 之后返回的值a[k].a[k++] = 4相当于:

a[k] = 4
k = k + 1
Run Code Online (Sandbox Code Playgroud)

另一方面,在返回之前++k会增加k,所以a[++k] = 4会增加

k = k + 1
a[k] = 4
Run Code Online (Sandbox Code Playgroud)

  • “具有增加`k`的副作用”并且在任何地方都不会混淆任何人:) (2认同)