✏️ 纠错
第 241 题 / 共 301 题
第15题 为了提高冒泡排序的效率,如果某轮“冒泡”中没有执行任何交换操作,说明数组已经完成排序,可直接返回结果,则两条横线上分别应该填写( )。
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;
}
}你真棒!
📝 题目解析
【考纲知识点】冒泡排序的优化
【正确答案】B
【题目解析】
优化逻辑:
使用标志位flag检测当前轮次是否发生交换。
若未发生交换,说明数组已完全有序,可提前终止循环。
标志位的设置:
外层循环开始:初始化为false,假设本轮无交换。
发生交换时:将flag设为true,表明数组仍需继续排序。
选项分析:
A错误:两次均设为false会导致无论是否交换,flag始终为false,循环在第一轮后即终止。
B正确:初始设false,发生交换时设true,符合逻辑。
C错误:初始设true,若未发生交换,flag保持true,导致无法提前终止循环。
D错误:两次均设true,flag始终为true,优化失效。
通过初始false假设有序,发生交换时置true,未交换则提前退出。因此,正确答案为B。