37 #C1104. 排序算法·稳定性与基础排序 专项练习
排序算法·稳定性与基础排序 专项练习
排序算法·稳定性与基础排序 专项练习(10 题)
本卷共 10 题:单项选择题 6 题、判断题 2 题、多项选择题 2 题。
一、单项选择题
- 商品热度排序要求热度相同时保留原始先后顺序,下列说法错误的是
{{ select(1) }}
- 冒泡排序稳定,仅左大于右时交换元素
- 插入排序稳定,相等元素不向前交换
- 选择排序稳定,每次提取最小值放到数组前端
- 排序稳定指等值元素排序后相对顺序不变
- 关于冒泡、选择、插入排序稳定性,正确的是
{{ select(2) }}
- 选择排序是稳定排序
- 冒泡排序相邻元素相等时不交换,则可保证稳定
- 插入排序一定不稳定
- 稳定排序执行速度一定快于不稳定排序
- 选择排序不稳定的根本原因是
{{ select(3) }}
- 循环次数过多
- 远距离交换操作容易打乱等值元素相对顺序
- 只能从小到大排序
- 无法处理重复数字
- 下方代码实现升序排序,该算法是
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) }}
- 冒泡排序
- 插入排序
- 选择排序
- 归并排序
- 升序插入排序,
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] < curarr[j] > curarr[j+1] > curarr[j] == cur
- 按 value 升序排序结果如下,稳定性描述正确的是
初始:(88,'A') (88,'B') (76,'C') (88,'D')
结果:(76,'C') (88,'A') (88,'B') (88,'D')
{{ select(6) }}
- 不稳定,因为出现了相同 value
- 稳定,因为相同 value 的原始相对顺序得到保持
- 不稳定,因为 C 被移到最前面
- 无法判断
二、判断题
- 选择排序是一种稳定的排序算法。
{{ select(7) }}
- 正确
- 错误
- 带 flag 优化的冒泡排序,若数组初始完全有序,仅需一轮遍历即可结束,时间复杂度为 O(n)。
{{ select(8) }}
- 正确
- 错误
三、多项选择题
- 关于三种基础排序,表述无误的是
{{ multiselect(9) }}
- 冒泡、插入均为稳定排序
- 基础选择排序不稳定,会打乱等值相对位置
- 稳定排序会交换相等元素、改变原有次序
- 有序数组用 flag 优化冒泡,一轮结束,O(n)
- 关于插入排序,正确的有
{{ multiselect(10) }}
- 每次将当前元素插入已排序部分的合适位置
- 数组接近有序时效率较高
- 时间复杂度始终为 O(n²)
- while 条件
j>=0 && a[j]>key用于升序插入定位