GESP 四级 · GESP 202603 C++ 四级 第 11 题

选择题 · 答案 B

← 整套速查表 GESP 四级 全部真题

题目

下面代码试图把数组按升序进行“插入排序”,横线处应填写( )。

void ins(int a[], int n){
    for(int i = 1; i < n; i++){
        int key = a[i];
        int j = i-1;
        while(j >= 0 && __________){
            a[j+1] = a[j];
            j--;
        }
        a[j+1] = key;
    }
}
答案:B

解题思维

答案B。代码补全要考虑参数传递方式。如果需要修改实参,需用指针(*)传递。排序算法要理解每步比较的含义。

常见错误

排序代码补全要理解每步比较的含义。选择排序找最小值时比较的是array[min]>array[j]。

详细解析(节选)

【考点】插入排序|数组比较逻辑|while循环条件

1. 考纲定位 GESP 四级《算法基础》模块第 3 章排序算法。命题人专盯「手写排序算法时条件判断」这一薄弱点——90% 的题能选对,但一旦条件写反,整个排序逻辑就彻底崩掉,所以必须卡住这里。

2. 解题思维 插入排序的核心是:把 a[i] 当作 key,在已排序的前 i 个元素中从右向左「挤」空位。挤的条件很明确——只要当前元素 a[j] 比 key 大,就得往后挪(a[j+1]=a[j])。于是 while 里的条件必须表达「a[j] 大于 key 且还没越界」,即 j >= 0 && a[j] > key。这一步是插入排序的通用模板,任何变体(升序/降序)都只需翻转这个比较符号。

3. 陷阱拆解

4. 反命题思维 如果把条件改成 a[j] < key,算法会退化成降序插入排序,但时间复杂度不变;若把 a[j] > key 换成 a[j] >= key,稳定性会被破坏,相同元素会错位。下次遇到「填空写循环条件」的题,先反问自己:「这个条件到底是用来筛选什么元素?方向对不对?」——这才是破题的关键。

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断