下述 C++ 代码实现了归并排序算法,则横线上应填写( )。
void merge(vector<int> &nums, int left, int mid, int right) {
// 左子数组区间为 [left, mid], 右子数组区间为 [mid+1, right]
vector<int> tmp(right - left + 1);
int i = left, j = mid + 1, k = 0;
while (i <= mid && j <= right) {
if (nums[i] <= nums[j])
tmp[k++] = nums[i++];
else
tmp[k++] = nums[j++];
}
while (i <= mid) {
tmp[k++] = nums[i++];
}
while (________) { // 在此处填入代码
tmp[k++] = nums[j++];
}
for (k = 0; k < tmp.size(); k++) {
nums[left + k] = tmp[k];
}
}
void mergeSort(vector<int> &nums, int left, int right) {
if (left >= right)
return;
int mid = (left + right) / 2;
mergeSort(nums, left, mid);
mergeSort(nums, mid + 1, right);
merge(nums, left, mid, right);
}根据上下文和C++语法规则确定空缺处应填的内容,关注函数调用参数、表达式和返回值类型。
填空时注意语法完整性:分号、括号匹配、函数参数类型和个数、返回值类型。
【考点】归并排序|合并过程逻辑|剩余元素处理
GESP 五级「算法与数据结构」模块,核心考察归并排序中 merge 函数的边界控制。命题人专门卡住"合并时剩余元素处理"这个多数考生会忽略的细节——绝大多数人只盯着主循环,对退出后哪个子数组可能剩下元素毫无概念。