林老师 · 客观题题库 · 专题 08 排序 · 复习强化

专题 08 排序 · 复习强化

100 题 · 每题对应一个知识细节 · 全部原创
真题
复刻
试卷编号ORIG-专题08排序-复习强化
题目总数106 题 · 100 分
试卷类型客观题
考生须知:
① 本卷共 11 大部分,合计 106 题 · 100 分,全部为客观题;
② 试卷右上角设有 「提交答卷」「重置考试」 按钮,提交后系统自动判分并显示答题正确情况,请确认全部作答后再行提交;
③ 试卷不显示答案,提交后方可查看每题作答与正确答案的对照;
④ 答卷进度会保留在本地缓存中,刷新或再次打开仍可继续作答;
⑤ 本卷仅供学生练习使用;请勿用于其他用途;题面有问题请联系:i64coder@163.com。

判 分 报 告

0 / 100 分
0
答 对 · 得 0
0
答 错 · 失 0
当前筛选下没有题目

排序概念

8 QUESTIONS · 2 POINTS EACH
第 1 题 A1 未作答

排序问题要重排的对象是( )。

(1 分)
第 2 题 A2 未作答

把数组 {5,2,9,1}\{5, 2, 9, 1\} 排成非递增顺序,结果是( )。

(1 分)
第 3 题 A3 未作答

排序算法"稳定"的准确含义是( )。

(1 分)
第 4 题 A4 未作答

稳定排序在实际中最重要的用处是( )。

(1 分)
第 5 题 A5 未作答

下列排序算法中,不通过比较元素大小完成排序的是( )。

(1 分)
第 6 题 A6 未作答

"原地排序"指的是( )。

(1 分)
第 7 题 A7 未作答

评价一个排序算法,通常关注的维度不包括( )。

(1 分)
第 8 题 A8 未作答

关于排序算法家族,正确的是( )。

(1 分)

冒泡排序

14 QUESTIONS · 2 POINTS EACH
第 9 题 B1 未作答

冒泡排序的基本动作是( )。

(1 分)
第 10 题 B2 未作答

{5,3,8,1}\{5, 3, 8, 1\} 升序冒泡,第一轮结束后的数组是( )。

(1 分)
第 11 题 B3 未作答

55 个元素的标准冒泡排序(不带提前退出优化),最多需要跑几轮内层扫描( )。

(1 分)
第 12 题 B4 未作答

冒泡排序的平均与最坏时间复杂度是( )。

(1 分)
第 13 题 B5 未作答

冒泡排序的稳定性判断:相邻比较交换时只有严格大于才交换,因此( )。

(1 分)
第 14 题 B6 未作答

带优化的冒泡每轮记下"是否发生过交换",若一整轮没有交换就提前结束。这样优化的目的是( )。

(1 分)
第 15 题 B7 未作答

已经有序的数组 {1,2,3}\{1, 2, 3\} 使用带提前退出优化的冒泡排序,总比较次数是( )。

(1 分)
第 16 题 B8 未作答

完全逆序的数组 {3,2,1}\{3, 2, 1\} 冒泡排序,总比较次数是( )。

(1 分)
第 17 题 B9 未作答

用冒泡排序对数组 {6,1,5,2,4}\{6, 1, 5, 2, 4\} 升序排序,需要的元素交换次数是( )。(2025 年 CSP-J 单选真题数据)

(1 分)
第 18 题 B10 未作答

阅读程序:

01int a[4] = {5, 3, 8, 1};
02for (int j = 0; j < 3; ++j)
03    if (a[j] > a[j + 1]) swap(a[j], a[j + 1]);

循环结束后数组是( )。

(1 分)
第 19 题 B11 未作答

{5,3,8,1}\{5, 3, 8, 1\} 升序冒泡两趟后(第二趟内层上界相应缩小),数组是( )。

(1 分)
第 20 题 B12 未作答

把升序冒泡改成降序(大的在前),只需把交换条件改成( )。

(1 分)
第 21 题 B13 未作答

标准冒泡第 ii 趟(ii00 起)的内层循环条件是 j < n - 1 - i,其中 - i 的作用是( )。

(1 分)
第 22 题 B14 未作答

{2,1,3}\{2, 1, 3\} 冒泡排序,整个过程中的交换次数与结果分别是( )。

(1 分)

选择排序

10 QUESTIONS · 2 POINTS EACH
第 23 题 C1 未作答

选择排序每一轮做的事情是( )。

(1 分)
第 24 题 C2 未作答

{1,2,3}\{1, 2, 3\}(已有序)做选择排序,总比较次数是( )。

(1 分)
第 25 题 C3 未作答

100100 个元素的选择排序,交换次数最多是( )。

(1 分)
第 26 题 C4 未作答

数组 {5a,8,5b,2}\{5_a, 8, 5_b, 2\}5a5_a5b5_b 值相等,下标区分身份)。选择排序第一轮把最小值 22 换到最前,结果是( )——这正是选择排序不稳定的现场。

(1 分)
第 27 题 C5 未作答

{4,1,3,2}\{4, 1, 3, 2\} 做选择排序第一轮(找最小放最前),数组变为( )。

(1 分)
第 28 题 C6 未作答

变体选择排序:每轮选最大值与未排序区间最后一个位置交换。对 {3,1,2}\{3, 1, 2\} 第一轮后数组是( )。

(1 分)
第 29 题 C7 未作答

选择排序相对冒泡排序的典型优势是( )。

(1 分)
第 30 题 C8 未作答

{5,2,8,1}\{5, 2, 8, 1\} 做选择排序一轮后的数组是( )。

(1 分)
第 31 题 C9 未作答

{5,2,8,1}\{5, 2, 8, 1\} 做完整选择排序,结果是( )。

(1 分)
第 32 题 C10 未作答

{4,1,3,2}\{4, 1, 3, 2\} 做完整选择排序,总交换次数是( )。

(1 分)

插入排序

11 QUESTIONS · 2 POINTS EACH
第 33 题 D1 未作答

插入排序的基本思想最像( )。

(1 分)
第 34 题 D2 未作答

插入排序进行过程中,数组前段的性质是( )。

(1 分)
第 35 题 D3 未作答

插入排序的平均与最坏时间复杂度是( )。

(1 分)
第 36 题 D4 未作答

已经有序{1,2,3,4}\{1, 2, 3, 4\} 做插入排序,元素移动次数是( )。

(1 分)
第 37 题 D5 未作答

插入排序中,内层把严格大于待插元素的项依次后移,相等的那项不动(待插元素插在它后面)。这样的结果是( )。

(1 分)
第 38 题 D6 未作答

阅读插入排序片段:

01int t = a[i], j = i - 1;
02while (j >= 0 && a[j] > t) { a[j + 1] = a[j]; --j; }
03a[j + 1] = t;

while 循环体的 a[j + 1] = a[j]; 做的是( )。

(1 分)
第 39 题 D7 未作答

插入排序片段 while (j >= 0 && a[j] > t)j >= 0 的作用是( )。

(1 分)
第 40 题 D8 未作答

{3,1,2}\{3, 1, 2\} 做插入排序第一步(把第 22 个元素插入前缀)后,数组是( )。

(1 分)
第 41 题 D9 未作答

{3,1,2}\{3, 1, 2\} 做插入排序两步后,数组是( )。

(1 分)
第 42 题 D10 未作答

对完全逆序的 {5,4,3,2,1}\{5, 4, 3, 2, 1\} 做插入排序,元素移动总次数是( )。

(1 分)
第 43 题 D11 未作答

三种平方级排序中,数据基本有序时实际耗时明显更短的是( )。

(1 分)

计数排序

10 QUESTIONS · 2 POINTS EACH
第 44 题 E1 未作答

计数排序的核心思路是( )。

(1 分)
第 45 题 E2 未作答

计数排序的时间复杂度是( )(nn 为元素个数、VV 为值域大小)。

(1 分)
第 46 题 E3 未作答

计数排序不适合的场景是( )。

(1 分)
第 47 题 E4 未作答

阅读程序:

01int a[5] = {3, 1, 3, 2, 1};
02int cnt[4] = {0, 0, 0, 0};
03for (int i = 0; i < 5; ++i)
04    cnt[a[i]]++;

循环结束后 cnt[3] 是( )。

(1 分)
第 48 题 E5 未作答

接统计结果:按值从小到大、每个值 cnt[v] 次地输出,{3,1,3,2,1}\{3, 1, 3, 2, 1\} 的输出序列是( )。

(1 分)
第 49 题 E6 未作答

要让计数排序对同值元素保持输入次序(稳定版),标准做法是( )。

(1 分)
第 50 题 E7 未作答

稳定版计数排序中,cnt 求前缀和后 cnt[v] 的含义变成( )。

(1 分)
第 51 题 E8 未作答

用(稳定)计数排序按双关键字 (a,b)(a, b) 排序:先按 aa 再按 bb 都升序。正确顺序是( )。(2019 年完善程序真题的骨架)

(1 分)
第 52 题 E9 未作答

{cnt[1]=2, cnt[2]=1, cnt[3]=2}\{cnt[1]{=}2,\ cnt[2]{=}1,\ cnt[3]{=}2\},若只要去重后的升序输出(每个值一次),输出是( )。

(1 分)
第 53 题 E10 未作答

要对含负数(如 5050-50 \sim 50)的成绩计数排序,下标处理办法是( )。

(1 分)

归并排序

12 QUESTIONS · 2 POINTS EACH
第 54 题 F1 未作答

归并排序的总体策略是( )。

(1 分)
第 55 题 F2 未作答

归并排序递归函数的核心结构是( )。

(1 分)
第 56 题 F3 未作答

把升序段 {1,4,6}\{1, 4, 6\}{2,3,5}\{2, 3, 5\} 合并成一个升序段,结果是( )。

(1 分)
第 57 题 F4 未作答

合并 {1,4,6}\{1, 4, 6\}{2,3,5}\{2, 3, 5\}(双下标取小法),关键字比较总次数是( )。

(1 分)
第 58 题 F5 未作答

归并排序的时间复杂度(最好、平均、最坏)是( )。

(1 分)
第 59 题 F6 未作答

归并排序需要 O(n)O(n) 辅助数组的原因是( )。

(1 分)
第 60 题 F7 未作答

归并时两段当前元素相等,标准写法取左段(if (L[i] <= R[j]) 取 L[i])。这个 = 的意义是( )。

(1 分)
第 61 题 F8 未作答

n=8n = 8 个元素做归并排序,递归拆分的层数(从整段拆到单元素)是( )。

(1 分)
第 62 题 F9 未作答

归并排序递归的终止条件(不再继续拆)是( )。

(1 分)
第 63 题 F10 未作答

{5,2,4,1}\{5, 2, 4, 1\} 做完整归并排序,结果是( )。

(1 分)
第 64 题 F11 未作答

归并合并时若右段当前元素 R[j]R[j] 小于左段剩余所有元素,则左段从当前位置到末尾的每个元素都与 R[j]R[j] 构成逆序对(左元素原下标更小、值却更大)。对 {3,1,2}\{3, 1, 2\} 归并排序过程中统计的逆序对总数是( )。(提高级经典应用,初赛了解思想)

(1 分)
第 65 题 F12 未作答

归并排序与快速排序的对比,正确的是( )。

(1 分)

快速排序

10 QUESTIONS · 2 POINTS EACH
第 66 题 G1 未作答

快速排序每一轮做的事情是( )。

(1 分)
第 67 题 G2 未作答

以首元素 44 为基准,对 {4,2,5,1,3}\{4, 2, 5, 1, 3\} 做一次分区(小的去左、大的去右),结果是( )。

(1 分)
第 68 题 G3 未作答

接分区结果:基准 44 一次分区后落在数组的哪个下标( 00 起)( )。

(1 分)
第 69 题 G4 未作答

快速排序的平均时间复杂度是( )。

(1 分)
第 70 题 G5 未作答

数组已经升序且每次取首元素为基准,快排的表现是( )。

(1 分)
第 71 题 G6 未作答

快速排序不稳定的原因是( )。

(1 分)
第 72 题 G7 未作答

快排代码若漏写"区间长度 1\le 1 就 return"的边界,后果是( )。

(1 分)
第 73 题 G8 未作答

工程上给快排加"随机选基准"或"三数取中"是为了( )。

(1 分)
第 74 题 G9 未作答

快排在最坏情况(每次分区极度不平衡)下的递归深度是( )。

(1 分)
第 75 题 G10 未作答

快速排序的辅助空间说法正确的是( )。

(1 分)

堆与堆排序

10 QUESTIONS · 2 POINTS EACH
第 76 题 H1 未作答

大根堆(最大堆)满足的性质是( )。

(1 分)
第 77 题 H2 未作答

用数组(下标从 00 起)存堆,结点 ii 的左右孩子下标是( )。

(1 分)
第 78 题 H3 未作答

down(i)(向下调整)操作做的是( )。

(1 分)
第 79 题 H4 未作答

把无序数组建成堆的标准做法是( )。

(1 分)
第 80 题 H5 未作答

{1,3,5,4,2}\{1, 3, 5, 4, 2\} 自底向上建大根堆,建完的数组是( )。

(1 分)
第 81 题 H6 未作答

自底向上建堆的总时间复杂度是( )(不是 nn 次 down 简单相乘)。

(1 分)
第 82 题 H7 未作答

堆排序的两个阶段是( )。

(1 分)
第 83 题 H8 未作答

堆排序的时间复杂度(最好、平均、最坏)是( )。

(1 分)
第 84 题 H9 未作答

堆排序不稳定的根本原因是( )。

(1 分)
第 85 题 H10 未作答

{3,1,4,1,5}\{3, 1, 4, 1, 5\} 做完整堆排序,结果是( )。

(1 分)

家族对比与选择

9 QUESTIONS · 2 POINTS EACH
第 86 题 I1 未作答

冒泡、选择、插入三种 O(n2)O(n^2) 排序,说法正确的是( )。

(1 分)
第 87 题 I2 未作答

平均时间复杂度为 O(nlogn)O(n \log n) 的排序算法是( )。

(1 分)
第 88 题 I3 未作答

最坏情况仍保证 O(nlogn)O(n \log n) 的算法是( )。

(1 分)
第 89 题 I4 未作答

下列全部为稳定排序的一组是( )。

(1 分)
第 90 题 I5 未作答

常见排序中的不稳定三兄弟是( )。(2022 年真题以"哪个说法错误"考过其中一员)

(1 分)
第 91 题 I6 未作答

任何基于比较的排序算法,最坏情况的比较次数下界是 Ω(nlogn)\Omega(n \log n)。这说明( )。(提高级了解)

(1 分)
第 92 题 I7 未作答

n=106n = 10^6 个整数排序、时限 1 秒,最稳的选择是( )。

(1 分)
第 93 题 I8 未作答

nn 很小(如 n20n \le 20)或数据基本有序时,实战里往往用插入排序,原因是( )。

(1 分)
第 94 题 I9 未作答

sort(a, a + n, cmp) 中比较函数 cmp(x, y) 返回真表示( )。

(1 分)

结构体排序与综合

6 QUESTIONS · 2 POINTS EACH
第 95 题 J1 未作答

nn 名学生有姓名和分数,要按分数升序输出(同分按输入先后),排序的对象是( )。

(1 分)
第 96 题 J2 未作答

结构体按 x 排序,希望降序(大在前),比较函数应写( )。

(1 分)
第 97 题 J3 未作答

点集 {(3,5),(1,9),(3,2)}\{(3,5), (1,9), (3,2)\},按"x 升序、x 相同时 y 升序"排序后是( )。

(1 分)
第 98 题 J4 未作答

nn 个平面点可能重复,统计"四角都是关键点且互不重合的矩形"前先要处理点集,正确做法是( )。(2021 年完善程序真题骨架)

(1 分)
第 99 题 J5 未作答

区间覆盖问题先按左端点排序再贪心,"先排序"的作用是( )。(2020 年完善程序真题骨架)

(1 分)
第 100 题 J6 未作答

下列说法错误的是( )。

(1 分)
拾壹

真 题 演 练

6 QUESTIONS · 真题演练不计分
第 102~106 题 完善程序 (共 0 分) 未作答

(计数排序)计数排序是一个广泛使用的排序方法。下面的程序使用双关键字计数排序,将 nn1000010000 以内的整数,从小到大排序。

例如有三对整数 (3,4)(3,4)(2,4)(2,4)(3,3)(3,3),那么排序之后应该是 (2,4)(2,4)(3,3)(3,3)(3,4)(3,4)

输入第一行为 nn,接下来 nn 行,第 ii 行有两个数 a[i]b[i],分别表示第 ii 对整数的第一关键字和第二关键字。

从小到大排序后输出。

数据范围 1n1071\le n\le 10^71a[i],b[i]1041\le a[i],b[i]\le 10^4

提示:应先对第二关键字排序,再对第一关键字排序。数组 ord[] 存储第二关键字排序的结果,数组 res[] 存储双关键字排序的结果。

试补全程序。

1  #include <cstdio>
2  #include <cstring>
3  using namespace std;
4  const int maxn = 10000000;
5  const int maxs = 10000;
6 
7  int n;
8  unsigned a[maxn], b[maxn], res[maxn], ord[maxn];
9  unsigned cnt[maxs + 1];
10 
11  int main() {
12      scanf("%d", &n);
13      for (int i = 0; i < n; ++i)
14          scanf("%d%d", &a[i], &b[i]);
15      memset(cnt, 0, sizeof(cnt));
16      for (int i = 0; i < n; ++i)
17          ①;  // 利用 cnt 数组统计数量
18      for (int i = 0; i < maxs; ++i)
19          cnt[i + 1] += cnt[i];
20      for (int i = 0; i < n; ++i)
21          ②;  // 记录初步排序结果
22      memset(cnt, 0, sizeof(cnt));
23      for (int i = 0; i < n; ++i)
24          ③;  // 利用 cnt 数组统计数量
25      for (int i = 0; i < maxs; ++i)
26          cnt[i + 1] += cnt[i];
27      for (int i = n - 1; i >= 0; --i)
28          ④;  // 记录最终排序结果
29      for (int i = 0; i < n; ++i)
30          printf("%d %d\n", ⑤);
31      return 0;
32  }

102.

①处应填( )。

103.

②处应填( )。

104.

③处应填( )。

105.

④处应填( )。

106.

⑤处应填( )。

CSP-J 2019 · 完善程序 第39-43题 | 知识点 计数排序、基数排序、一维数组
第 6 题 单选 未作答

冒泡排序算法的伪代码如下:

输入:数组 LLn1n\ge 1。输出:按非递减顺序排序的 LL

算法 BubbleSort:

1  FLAG ← n    //标记被交换的最后元素位置
2  while FLAG > 1 do
3      k ← FLAG - 1
4      FLAG ← 1
5      for j = 1 to k do
6          if L(j) > L(j + 1) then do
7              L(j) ↔ L(j + 1)
8              FLAG ← j

nn 个数用以上冒泡排序算法进行排序,最少需要比较多少次?( )

(0 分)
CSP-J 2020 · 单选 第5题 | 知识点 冒泡排序、排序复杂度
第 110~114 题 完善程序 (共 0 分) 未作答

(最小区间覆盖)给出 nn 个区间,第 ii 个区间的左右端点是 [ai,bi][a_i,b_i]。现在要在这些区间中选出若干个,使得区间 [0,m][0,m] 被所选区间的并覆盖(即每一个 0im0\le i\le m 都在某个所选的区间中)。保证答案存在,求所选区间个数的最小值。

输入第一行包含两个整数 nnmm1n50001\le n\le50001m1091\le m\le10^9)。

接下来 nn 行,每行两个整数 aia_ibib_i0ai,bim0\le a_i,b_i\le m)。

提示:使用贪心法解决这个问题。先用 Θ(n2)\Theta(n^2) 的时间复杂度排序,然后贪心选择这些区间。

试补全程序。

1  #include <iostream>
2 
3  using namespace std;
4 
5  const int MAXN = 5000;
6  int n, m;
7  struct segment { int a, b; } A[MAXN];
8 
9  void sort() // 排序
10  {
11      for (int i = 0; i < n; i++)
12          for (int j = 1; j < n; j++)
13              if (①)
14              {
15                  segment t = A[j];
16 
17              }
18  }
19 
20  int main()
21  {
22      cin >> n >> m;
23      for (int i = 0; i < n; i++)
24          cin >> A[i].a >> A[i].b;
25      sort();
26      int p = 1;
27      for (int i = 1; i < n; i++)
28          if (③)
29              A[p++] = A[i];
30      n = p;
31      int ans = 0, r = 0;
32      int q = 0;
33      while (r < m)
34      {
35          while (④)
36              q++;
37          ⑤;
38          ans++;
39      }
40      cout << ans << endl;
41      return 0;
42  }

110.

①处应填( )。

111.

②处应填( )。

112.

③处应填( )。

113.

④处应填( )。

114.

⑤处应填( )。

CSP-J 2020 · 完善程序 第39-43题 | 知识点 贪心、冒泡排序、结构体
第 116~120 题 完善程序 (共 0 分) 未作答

(矩形计数)平面上有 nn 个关键点,求有多少个四条边都和 x 轴或者 y 轴平行的矩形,满足四个顶点都是关键点。给出的关键点可能有重复,但完全重合的矩形只计一次。

试补全枚举算法。

1  #include <iostream>
2 
3  using namespace std;
4 
5  struct point {
6      int x, y, id;
7  };
8 
9  bool equals(point a, point b) {
10      return a.x == b.x && a.y == b.y;
11  }
12 
13  bool cmp(point a, point b) {
14      return ①;
15  }
16 
17  void sort(point A[], int n) {
18      for (int i = 0; i < n; i++)
19          for (int j = 1; j < n; j++)
20              if (cmp(A[j], A[j - 1])) {
21                  point t = A[j];
22                  A[j] = A[j - 1];
23                  A[j - 1] = t;
24              }
25  }
26 
27  int unique(point A[], int n) {
28      int t = 0;
29      for (int i = 0; i < n; i++)
30          if (②)
31              A[t++] = A[i];
32      return t;
33  }
34 
35  bool binary_search(point A[], int n, int x, int y) {
36      point p;
37      p.x = x;
38      p.y = y;
39      p.id = n;
40      int a = 0, b = n - 1;
41      while (a < b) {
42          int mid = ③;
43          if (④)
44              a = mid + 1;
45          else
46              b = mid;
47      }
48      return equals(A[a], p);
49  }
50 
51  const int MAXN = 1000;
52  point A[MAXN];
53 
54  int main() {
55      int n;
56      cin >> n;
57      for (int i = 0; i < n; i++) {
58          cin >> A[i].x >> A[i].y;
59          A[i].id = i;
60      }
61      sort(A, n);
62      n = unique(A, n);
63      int ans = 0;
64      for (int i = 0; i < n; i++)
65          for (int j = 0; j < n; j++)
66              if (⑤ && binary_search(A, n, A[i].x, A[j].y) && binary_search(A, n, A[j].x, A[i].y)) {
67                  ans++;
68              }
69      cout << ans << endl;
70      return 0;
71  }

116.

①处应填( )

117.

②处应填( )

118.

③处应填( )

119.

④处应填( )

120.

⑤处应填( )

CSP-J 2021 · 完善程序 第39-43题 | 知识点 二分查找、冒泡排序、结构体
第 17 题 单选 未作答

以下排序算法的常见实现中,哪个选项的说法是错误的:( )。

(0 分)
CSP-J 2022 · 单选 第12题 | 知识点 排序稳定性、选择排序
第 18 题 单选 未作答

某同学用冒泡排序对数组 {6,1,5,2,46, 1, 5, 2, 4} 进行升序排序,请问需要进行多少次元素交换?( )

(0 分)
CSP-J 2025 · 单选 第12题 | 知识点 模拟、排序稳定性