合并排序复制上半场的其余部分



合并排序算法的部分是这样,当它合并两个数组时:

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++;
}

我了解语句的第一个。但是,第二个和第三个语句的意义是什么。因为第一次停止," fromvalue>中间"one_answers"中间值>"已经停止。那么,那两个声明将被跳过吗?

让我们以一个示例示例数组: {2, 4, 7, 9, 1, 3, 5, 6}

第一个while循环复制序列 1, 2, 3, 4, 5, 6在此点middlevalue到达to。因此,循环结束。

然后,该程序将移至剩余的第一个循环,该循环在值7, 9中复制。

案例示例2,以数组:{4, 7, 8, 10, 5, 6, 12, 14}在此, 4, 5, 6, 7, 8, 10中的主循环副本副本fromValue已达到mid。因此,循环结束了。

然后,程序将移至剩余的第二个,而循环则在值12, 14中复制。

因此,在跳过循环时只有一个(一个依赖于两个较小的初始数组)。

最新更新