#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. 死循环