当合并排序算法合并两个数组时,其部分看起来像这样:
while (fromValue <= mid && middleValue <= to) {
if (comp.compare(a[fromValue], a[middleValue]) < 0) {
values[index] = a[fromValue];
fromValue++;
} else {
values[index] = a[middleValue];
middleValue++;
}
index++;
}
while (fromValue <= mid) {
values[index] = a[fromValue];
fromValue++;
index++;
}
while (middleValue <= to) {
values[index] = a[middleValue];
middleValue++;
index++;
}
我理解第一个while语句。但最重要的是第二次和第三次声明。因为第一次停止,&#34; fromValue&gt;中间&#34;和&#34; middleValue&gt;到&#34;已经。那么其他两个while语句将被跳过?
答案 0 :(得分:1)
我们来看一个Case示例数组:{2, 4, 7, 9, 1, 3, 5, 6}
第一个while循环复制1, 2, 3, 4, 5, 6
已到达middlevalue
的序列to
。所以,循环结束。
程序然后移动到剩余的while循环中的第一个,其复制值7, 9
。
案例2,取数组:{4, 7, 8, 10, 5, 6, 12, 14}
这里的主要while循环在4, 5, 6, 7, 8, 10
中复制,此时fromValue
已达到mid
。所以,循环结束。
然后程序移动到余下的while循环中的第二个,这些循环复制在值12, 14
中。
因此,跳过两个较小的while循环中只有一个(哪一个取决于初始数组)。