37 #C1104. 排序算法·稳定性与基础排序 专项练习

排序算法·稳定性与基础排序 专项练习

排序算法·稳定性与基础排序 专项练习(10 题)

本卷共 10 题:单项选择题 6 题、判断题 2 题、多项选择题 2 题。

一、单项选择题

  1. 商品热度排序要求热度相同时保留原始先后顺序,下列说法错误的是

{{ select(1) }}

  • 冒泡排序稳定,仅左大于右时交换元素
  • 插入排序稳定,相等元素不向前交换
  • 选择排序稳定,每次提取最小值放到数组前端
  • 排序稳定指等值元素排序后相对顺序不变
  1. 关于冒泡、选择、插入排序稳定性,正确的是

{{ select(2) }}

  • 选择排序是稳定排序
  • 冒泡排序相邻元素相等时不交换,则可保证稳定
  • 插入排序一定不稳定
  • 稳定排序执行速度一定快于不稳定排序
  1. 选择排序不稳定的根本原因是

{{ select(3) }}

  • 循环次数过多
  • 远距离交换操作容易打乱等值元素相对顺序
  • 只能从小到大排序
  • 无法处理重复数字
  1. 下方代码实现升序排序,该算法是
for(int i=0;i<len-1;i++){ int minIdx=i;
  for(int j=i+1;j<len;j++) if(arr[j]<arr[minIdx]) minIdx=j;
  float t=arr[i]; arr[i]=arr[minIdx]; arr[minIdx]=t; }

{{ select(4) }}

  • 冒泡排序
  • 插入排序
  • 选择排序
  • 归并排序
  1. 升序插入排序,while(j >= 0 && ______) 横线处应填
int cur=arr[i]; int j=i-1;
while(j>=0 && ______){ arr[j+1]=arr[j]; j--; }
arr[j+1]=cur;

{{ select(5) }}

  • arr[j] < cur
  • arr[j] > cur
  • arr[j+1] > cur
  • arr[j] == cur
  1. 按 value 升序排序结果如下,稳定性描述正确的是
初始:(88,'A') (88,'B') (76,'C') (88,'D')
结果:(76,'C') (88,'A') (88,'B') (88,'D')

{{ select(6) }}

  • 不稳定,因为出现了相同 value
  • 稳定,因为相同 value 的原始相对顺序得到保持
  • 不稳定,因为 C 被移到最前面
  • 无法判断

二、判断题

  1. 选择排序是一种稳定的排序算法。

{{ select(7) }}

  • 正确
  • 错误
  1. 带 flag 优化的冒泡排序,若数组初始完全有序,仅需一轮遍历即可结束,时间复杂度为 O(n)。

{{ select(8) }}

  • 正确
  • 错误

三、多项选择题

  1. 关于三种基础排序,表述无误的是

{{ multiselect(9) }}

  • 冒泡、插入均为稳定排序
  • 基础选择排序不稳定,会打乱等值相对位置
  • 稳定排序会交换相等元素、改变原有次序
  • 有序数组用 flag 优化冒泡,一轮结束,O(n)
  1. 关于插入排序,正确的有

{{ multiselect(10) }}

  • 每次将当前元素插入已排序部分的合适位置
  • 数组接近有序时效率较高
  • 时间复杂度始终为 O(n²)
  • while 条件 j>=0 && a[j]>key 用于升序插入定位