#6720. 基础选择排序-选择题
基础选择排序-选择题
1. 以下关于选择排序的说法,正确的是( )。
{{ select(1) }}
- 每一趟排序可以确定多个元素的最终位置
- 选择排序是稳定的排序算法
- 选择排序的时间复杂度在任何情况下都是 O(n²)
- 选择排序在数组基本有序时效率会显著提高
2. 对于数组 [5, 3, 8, 1, 4],使用上述代码(升序选择排序)进行排序,第一趟(i=1)结束后,数组的状态是( )。
{{ select(2) }}
[1, 5, 8, 3, 4][1, 3, 8, 5, 4][1, 3, 5, 8, 4][1, 5, 3, 8, 4]
3. 在上述代码中,外层循环 for(int i=1;i<=n;i++) 若改为 for(int i=1;i<n;i++),则排序结果会( )。
{{ select(3) }}
- 完全正确
- 最后一个元素可能没有排好
- 程序编译错误
- 第一个元素没有排好
4. 若将代码中的 if(a[i]>a[j]) 改为 if(a[i]<a[j]),则排序结果会变成( )。
{{ select(4) }}
- 升序
- 降序
- 不变
- 无法排序
5. 对于数组 [2, 2, 1],使用上述代码排序,两个2的相对顺序会发生变化吗?
{{ select(5) }}
- 会,选择排序不稳定
- 不会,选择排序稳定
- 取决于具体实现
- 无法确定
6. 上述代码中,内层循环 for(int j=i+1;j<=n;j++) 的作用是( )。
{{ select(6) }}
- A. 将当前元素与前面所有元素比较
- B. 在 i 后面的元素中寻找比 a[i] 小的元素并交换
- C. 将当前元素与后面一个元素比较
- D. 将数组后半部分进行冒泡排序
7. 对于长度为 n 的数组,选择排序总共需要进行多少次元素比较(不考虑提前结束)?
{{ select(7) }}
- A. n-1
- B. n(n-1)/2
- C. n(n+1)/2
- D. n²
8. 若输入数组已经完全升序(如 1,2,3,4,5),选择排序的交换次数是( )。
{{ select(8) }}
- A. 0
- B. n-1
- C. n
- D. n(n-1)/2
9. 在上述代码中,如果将内层循环的 j<=n 误写为 j<n,则会发生什么?
{{ select(9) }}
- A. 最后一个元素永远不会参与比较
- B. 程序正常运行,结果正确
- C. 数组越界
- D. 死循环