林老师 · 客观题题库 · CSP-S 卷
CSP-S 卷
堆/堆排序/各排序算法/稳定性/复杂度 · 共 35 题 · 由简到难 · 建议 53 分钟
真题
复刻
试卷编号OBJ-300347
题目总数35 题 · 70 分
试卷类型客观题
考生须知:
① 本卷为客观题单卷,合计 35 题 · 70 分,全部为客观题;
② 试卷右上角设有 「提交答卷」 与 「重置考试」 按钮,提交后系统自动判分并显示答题正确情况,请确认全部作答后再行提交;
③ 试卷不显示答案,提交后方可查看每题作答与正确答案的对照;
④ 答卷进度会保留在本地缓存中,刷新或再次打开仍可继续作答;
⑤ 本卷仅供学生练习使用;请勿用于其他用途;题面有问题请联系:i64coder@163.com。
壹
客 观 题
35 QUESTIONS · 2 POINTS EACH
第 1 题
单选
未作答
假设一个长度为 n 的整数数组中每个元素值互不相同,且这个数组是无序的。要找到这个数组中最大元素的时间复杂度是多少?( )
(2 分)
CSP-S 2024 · 单选 第2题 | 知识点 剪枝、排序稳定性
第 2 题
单选
未作答
(2 分)
CSP-S 2021 · 单选 第4题 | 知识点 差分、计数排序
第 3 题
单选
未作答
考虑对 n 个数进行排序,以下最坏时间复杂度低于 O(n2) 的排序方法是( )。
(2 分)
CSP-S 2022 · 单选 第4题 | 知识点 顺序查找、排序稳定性
第 4 题
判断
未作答
(2 分)
GESP 四级 2025-12 · 判断 第7题 | 知识点 冒泡排序、插入排序、排序稳定性
第 5 题
判断
未作答
由于选择排序和插入排序的时间复杂度均为 O(n2),在任何实际场景下两者的性能表现几乎相同,可以互相替代。
(2 分)
GESP 四级 2026-03 · 判断 第9题 | 知识点 选择排序、插入排序、排序复杂度
第 6 题
判断
未作答
选择排序算法在寻找每一轮最小值时,如果遇到相等的元素不进行交换,则选择排序是一种稳定的排序算法。
(2 分)
GESP 四级 2026-06 · 判断 第4题 | 知识点 选择排序、排序稳定性
第 7 题
判断
未作答
如果使用带 flag 的冒泡排序,且待排序数组一开始就是有序的,那么算法只需一轮扫描即可结束,时间复杂度为 O(n)。
(2 分)
GESP 四级 2026-06 · 判断 第5题 | 知识点 冒泡排序、排序复杂度
第 8 题
单选
未作答
(2 分)
GESP 五级 2025-03 · 单选 第9题 | 知识点 排序稳定性、选择排序
第 9 题
判断
未作答
归并排序的最好、最坏和平均时间复杂度均为 O(nlogn)。
(2 分)
GESP 五级 2025-06 · 判断 第5题 | 知识点 归并排序、排序复杂度
第 10 题
判断
未作答
(2 分)
GESP 五级 2025-09 · 判断 第7题 | 知识点 排序稳定性、快速排序、归并排序
第 11 题
单选
未作答
(2 分)
GESP 五级 2025-12 · 单选 第8题 | 知识点 排序稳定性、归并排序
第 12 题
单选
未作答
排序的算法很多,若按排序的稳定性和不稳定性分类,则( )是不稳定排序。
(2 分)
CSP-S 2019 · 单选 第7题 | 知识点 双指针、计数排序
第 13 题
单选
未作答
设 A 和 B 是两个长度为 n 的有序数组,现在需要将 A 和 B 合并成一个排序好的数组。请问任何以元素比较作为基本运算的归并算法,在最坏情况下至少要做多少次比较?( )
(2 分)
CSP-S 2019 · 单选 第11题 | 知识点 顺序查找、排序稳定性
第 14 题
单选
未作答
以比较为基本运算,对于 2n 个数,同时找到最大值和最小值,最坏情况下需要的最少比较次数为( )。
(2 分)
CSP-S 2021 · 单选 第5题 | 知识点 选择排序、排序稳定性
第 15 题
单选
未作答
假设在基数排序过程中,受宇宙射线的影响,某项数据异变为一个完全不同的值。请问排序算法结束后,可能出现的最坏情况是( )。
(2 分)
CSP-S 2022 · 单选 第5题 | 知识点 二分答案、计数排序
第 16 题
单选
未作答
对于给定的 n,分析以下代码段对应的时间复杂度,其中最为准确的时间复杂度为( )。
01int i, j, k = 0;
02for (i = 0; i < n; i++) {
03 for (j = 0; j < n; j *= 2) {
04 k = k + n / 2;
05 }
06}
(2 分)
CSP-S 2022 · 单选 第13题 | 知识点 排序稳定性、剪枝、逻辑运算
第 17 题
单选
未作答
假设快速排序算法的输入是一个长度为 n 的已排序数组,且该快速排序算法在分治过程中总是选择第一个元素作为基准元素。以下哪个选项描述的是这种情况下的快速排序行为?( )
(2 分)
CSP-S 2023 · 单选 第10题 | 知识点 双指针、排序稳定性
第 18 题
单选
未作答
递归关系式 T(n)=2T(n/2)+O(n2) 描述了某个分治算法的时间复杂度。请问该算法的时间复杂度是多少?
(2 分)
CSP-S 2025 · 单选 第11题 | 知识点 选择排序、排序稳定性
第 19 题
判断
未作答
(2 分)
GESP 五级 2023-09 · 判断 第7题 | 知识点 归并排序、冒泡排序、排序复杂度
第 20 题
判断
未作答
C++ 语言中的 qsort 库函数是不稳定排序。
(2 分)
GESP 五级 2023-09 · 判断 第8题 | 知识点 排序稳定性、STL算法与函数
第 21 题
判断
未作答
(2 分)
GESP 五级 2023-12 · 判断 第6题 | 知识点 插入排序、快速排序、排序复杂度
第 22 题
单选
未作答
在快速排序中,选择的主元素(pivot)会影响算法的( )。
(2 分)
GESP 五级 2024-03 · 单选 第13题 | 知识点 快速排序、排序复杂度
第 23 题
判断
未作答
归并排序和快速排序都采用递归实现,也都是不稳定排序。
(2 分)
GESP 五级 2024-06 · 判断 第7题 | 知识点 归并排序、快速排序、排序稳定性
第 24 题
单选
未作答
假设快速排序算法的输入是一个长度为 n 的已排序数组,且该快速排序算法在分治过程总是选择第一个元素作为基准元素。下面选项( )描述的是在这种情况下的快速排序行为。
(2 分)
GESP 五级 2024-09 · 单选 第9题 | 知识点 快速排序、排序复杂度
第 25 题
判断
未作答
快速排序和归并排序的平均时间复杂度均为 O(nlogn),且都是稳定排序。
(2 分)
GESP 五级 2024-09 · 判断 第5题 | 知识点 排序稳定性、快速排序、归并排序
第 26 题
单选
未作答
(2 分)
GESP 五级 2024-12 · 单选 第10题 | 知识点 归并排序、排序复杂度
第 27 题
单选
未作答
关于下述 C++ 代码的快速排序算法,说法错误的是( )。
01int randomPartition(std::vector<int>& arr, int low, int high) {
02 int random = low + rand() % (high - low + 1);
03 std::swap(arr[random], arr[high]);
04
05 int pivot = arr[high];
06 int i = low - 1;
07
08 for (int j = low; j < high; j++) {
09 if (arr[j] <= pivot) {
10 i++;
11 std::swap(arr[i], arr[j]);
12 }
13 }
14 std::swap(arr[i + 1], arr[high]);
15 return i + 1;
16}
17
18void quickSort(std::vector<int>& arr, int low, int high) {
19 if (low < high) {
20 int pi = randomPartition(arr, low, high);
21
22 quickSort(arr, low, pi - 1);
23 quickSort(arr, pi + 1, high);
24 }
25}
(2 分)
GESP 五级 2025-06 · 单选 第14题 | 知识点 快速排序、排序稳定性、程序阅读与输出推断
第 28 题
单选
未作答
下述 C++ 代码实现了快速排序算法,下面说法错误的是( )。
01int partition(vector<int>& arr, int low, int high) {
02 int i = low, j = high;
03 int pivot = arr[low]; // 以首元素为基准
04 while (i < j) {
05 while (i < j && arr[j] >= pivot) j--; // 从右往左查找
06 while (i < j && arr[i] <= pivot) i++; // 从左往右查找
07 if (i < j) swap(arr[i], arr[j]);
08 }
09 swap(arr[i], arr[low]);
10 return i;
11}
12
13void quickSort(vector<int>& arr, int low, int high) {
14 if (low >= high) return;
15 int p = partition(arr, low, high);
16 quickSort(arr, low, p - 1);
17 quickSort(arr, p + 1, high);
18}
(2 分)
GESP 五级 2025-09 · 单选 第11题 | 知识点 快速排序、排序复杂度、程序阅读与输出推断
第 29 题
单选
未作答
下面代码实现了归并排序。下述关于归并排序的说法中,不正确的是( )。
01void merge(vector<int>& arr, vector<int>& temp, int l, int mid, int r) {
02 int i = l, j = mid + 1, k = l;
03 while (i <= mid && j <= r) {
04 if (arr[i] <= arr[j]) temp[k++] = arr[i++];
05 else temp[k++] = arr[j++];
06 }
07 while (i <= mid) temp[k++] = arr[i++];
08 while (j <= r) temp[k++] = arr[j++];
09 for (int p = l; p <= r; p++) arr[p] = temp[p];
10}
11
12void mergeSort(vector<int>& arr, vector<int>& temp, int l, int r) {
13 if (l >= r) return;
14 int mid = l + (r - l) / 2;
15 mergeSort(arr, temp, l, mid);
16 mergeSort(arr, temp, mid + 1, r);
17 merge(arr, temp, l, mid, r);
18}
(2 分)
GESP 五级 2025-12 · 单选 第9题 | 知识点 归并排序、排序复杂度
第 30 题
判断
未作答
归并排序和快速排序在平均情况下的时间复杂度均为 O(nlogn)。但在稳定性方面,归并排序通常是不稳定的,而快速排序是稳定的。
(2 分)
GESP 五级 2026-06 · 判断 第10题 | 知识点 排序稳定性、快速排序、归并排序
第 31 题
判断
未作答
(2 分)
GESP 七级 2024-09 · 判断 第3题 | 知识点 选择排序、排序稳定性
第 32 题
判断
未作答
(2 分)
GESP 七级 2025-03 · 判断 第3题 | 知识点 快速排序、排序稳定性
第 33 题
单选
未作答
(2 分)
GESP 七级 2026-06 · 单选 第9题 | 知识点 排序稳定性、冒泡排序
第 34 题
判断
未作答
(2 分)
GESP 七级 2024-06 · 判断 第2题 | 知识点 冒泡排序、排序稳定性
第 35 题
单选
未作答
归并排序每次把长度为 n 的序列分成两个规模约为 n/2 的子序列,递归排序后再用线性时间合并。该算法的时间复杂度通常为( )。
(2 分)
GESP 八级 2026-06 · 单选 第6题 | 知识点 归并排序、排序复杂度