在下面的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)