✏️ 纠错
第 249 题 / 共 301 题
第8题 以下C++代码,尝试对有n个整数的数组arr进行排序。这个代码实现了选择排序算法。
for (int i = 0; i < n - 1; ++i) {
    int minIndex = i;
    for (int j = i + 1; j < n; ++j) {
        if (arr[j] < arr[minIndex])
            minIndex = j;
    }
    if (minIndex != i)
        swap(arr[i], arr[minIndex]);
}
📝 题目解析

【考纲知识点】选择排序的实现原理、时间复杂度分析、数组操作

【正确答案】√

【题目解析】

选择排序的核心思想:

将数组分为已排序和未排序两部分,初始时已排序部分为空。

每轮从未排序部分中选择最小元素,与未排序部分的第一个元素交换位置,逐步扩大已排序部分。

代码流程分析:

外层循环(i从0到n-2):控制当前未排序部分的起始位置。

内层循环(j从i+1到n-1):遍历未排序部分,找到最小值的索引minIndex。

交换操作:若minIndex不等于i,则交换arr[i]与arr[minIndex],将最小值放到已排序部分末尾。

关键点验证:

最小值选择:内层循环确保minIndex指向未排序部分的最小元素。

边界处理:外层循环到n-2为止,因为最后一个元素会在前面的迭代中自然排好。

避免冗余交换:通过if (minIndex != i)判断,避免自我交换。

时间复杂度:

无论数据初始状态如何,均需进行两轮嵌套循环,时间复杂度为O(n2)。

结论:该代码严格遵循选择排序的算法逻辑,正确实现了选择排序,因此答案为正确。