在下列代码的横线处填写( ),完成对有 n 个 int 类型元素的数组 array 由小到大排序。
void SelectionSort(int array[], int n) {
int i, j, min, temp;
for (i = 0; i < n - 1; i++) {
min = i;
for (j = i + 1; j < n; j++)
if (________) // 在此处填入代码
min = j;
temp = array[min];
array[min] = array[i];
array[i] = temp;
}
}
这道题考选择排序。别被 min=i 迷惑,它只是个下标。内循环要不断找更小的数,核心就是拿当前最小值 array[min] 去和后面每个元素 array[j] 比,比小就更新 min,填 array[min]>array[j]。
选 B 的人往往盯着 min=i 这个初始值,觉得比较 array[min] 和 array[i] 好像能验证什么,其实 min 初始就是 i,这步比较永远为假,逻辑直接崩。选 C、D 的则是把下标和值混在一起比,类型都不对,编译器都过不去。这些坑都是命题人故意设的,想抓那些只背'找最小值'却不懂比较对象的。
【考点】选择排序|数组遍历|条件判断
本题考查《GESP 四级 C++ 大纲》“算法基础模块”中的选择排序实现。命题人在这道填空题卡住的是考生对排序算法最小值索引追踪逻辑的理解——四级考生最容易在“找最小值”的循环条件上栽跟头,混淆比较对象。选择排序的核心思想是:每一轮从当前位置 i 开始,在后面的元素里找最小的那个,把它和当前位置交换。代码里用 min 记录最小值的下标,用 temp 做交换,这是标准写法。填空题只缺了那个“找最小值”的判断条件。