为了提高冒泡排序的效率,如果某轮“冒泡”中没有执行任何交换操作,说明数组已经完成排序,可直接返回结果,则两条横线上分别应该填写( )。
void bubbleSortWithFlag(vector<int> &nums) {
for (int i = nums.size() - 1; i > 0; i--) {
bool flag;
// 在此处填入代码
for (int j = 0; j < i; j++) {
if (nums[j] > nums[j + 1]) {
swap(nums[j], nums[j + 1]);
// 在此处填入代码
}
}
if (!flag)
break;
}
}A.
flag = false;
flag = false;B.
flag = false;
flag = true;C.
flag = true;
flag = false;D.
flag = true;
flag = true;答案B。代码补全要考虑参数传递方式。如果需要修改实参,需用指针(*)传递。排序算法要理解每步比较的含义。
排序代码补全要理解每步比较的含义。选择排序找最小值时比较的是array[min]>array[j]。
【考点】冒泡排序|标志位优化|循环提前退出
本题考查 GESP C++ 四级《算法与数据结构》模块中的冒泡排序优化技巧。命题人在这里卡住绝大多数考生,是因为他们只背了"冒泡排序要加一个标记提前结束"这个结论,却忘了标记变量初始值必须为 true——这是最容易被忽略的细节。