#G5OBJ03. GESP C++ 五级真题客观题|分治与排序
GESP C++ 五级真题客观题|分治与排序
01|2025-03-L5-SC-09
下列算法中,( )是不稳定的排序。
{{ select(1) }}
- 选择排序
- 插入排序
- 归并排序
- 冒泡排序
02|2025-03-L5-TF-10
归并排序算法体现了分治算法,每次将大的待排序数组分成大小大致相等的两个小数组,然后分别对两个小数组进行排序,最后对排好序的两个小数组合并成有序数组。
{{ select(2) }}
- 正确
- 错误
03|2025-06-L5-TF-05
归并排序的最好、最坏和平均时间复杂度均为 O(n log n)。
{{ select(3) }}
- 正确
- 错误
04|2025-06-L5-TF-08
分治算法将原问题可以分解成规模更小的子问题,使得求解问题的难度降低。但由于分治算法需要将问题进行分解,并且需要将多个子问题的解合并为原问题的解,所以分治算法的效率通常比直接求解原问题的效率低。
{{ select(4) }}
- 正确
- 错误
05|2025-12-L5-SC-08
下列关于排序的说法,正确的是( )。
{{ select(5) }}
- 快速排序是稳定排序
- 归并排序通常是稳定的
- 插入排序是不稳定排序
- 冒泡排序不是原地排序
06|2026-03-L5-TF-03
快速排序只要每次都选取中间元素作为枢轴,就一定是稳定排序。
{{ select(6) }}
- 正确
- 错误
07|2026-03-L5-SC-14
下面关于排序算法的描述中,不正确的是( )。
{{ select(7) }}
- 冒泡排序和插入排序都是稳定的排序算法
- 快速排序和归并排序都是不稳定的排序算法
- 冒泡排序和插入排序最好时间复杂度均为O(n)
- 归并排序在最好、最坏和平均三种情况的时间复杂度均为O(n log n)
08|2025-03-L5-TF-06
快速排序算法的时间复杂度与输入是否有序无关,始终稳定为 O(n log n)。
{{ select(8) }}
- 正确
- 错误
09|2025-03-L5-TF-07
归并排序算法的时间复杂度与输入是否有序无关,始终稳定为 O(n log n)。
{{ select(9) }}
- 正确
- 错误
10|2025-06-L5-TF-04
下面的C++代码实现归并排序。代码在执行时,将输出一次 HERE 字符串,因为merge()函数仅被调用一次。


{{ select(10) }}
- 正确
- 错误
11|2025-09-L5-TF-07
快速排序和归并排序都是稳定的排序算法。
{{ select(11) }}
- 正确
- 错误
12|2025-12-L5-TF-06
通过在数组的第一个、最中间和最后一个这3个数据中选择中间值作为枢轴(比较基准),快速排序算法可降低落入最坏情况的概率。
{{ select(12) }}
- 正确
- 错误
13|2025-12-L5-SC-09
下面代码实现了归并排序。下述关于归并排序的说法中,不正确的是( )。

{{ select(13) }}
- 归并排序的平均复杂度是O(n log n)。
- 归并排序需要O(n)的额外空间。
- 归并排序在最坏情况的时间复杂度是O(n²)。
- 归并排序适合大规模数据。
14|2025-12-L5-SC-10
下述C++代码实现了快速排序算法,最坏情况的时间复杂度是( )。

{{ select(14) }}
- O(n)
- O(log n)
- O(n²)
- O(n log n)
15|2026-03-L5-SC-12
游戏大赛决赛,两组选手分别按得分从小到大排好队,现在要把他们合并成一个有序排行榜。A组:A={12,35,67,89},B组:B={20,45,55,78},下面是归并合并函数的核心循环,横线处应填入( )。

{{ select(15) }}
- A[i] >= B[j]
- A[i] <= B[j]
- i >= j
- i <= j
16|2026-03-L5-SC-13
有n位同学的成绩已经从小到大排好序,现在对它执行下面这段以第一个元素为pivot的快速排序,请问此次排序的时间复杂度是( )。

{{ select(16) }}
- O(n)
- O(n log n)
- O(n²)
- O(log n)
17|2026-06-L5-TF-04
在归并排序的合并操作中,如下代码片段可以正确地将两个已排序的子数组 L 和 R 合并回原数组 arr 中。

{{ select(17) }}
- 正确
- 错误
18|2026-06-L5-TF-05
分治法通常将一个规模较大的问题拆分为若干个规模较小、结构相似的子问题,分别求解后再合并子问题的结果。
{{ select(18) }}
- 正确
- 错误
19|2026-06-L5-SC-07
下面代码实现了计算 xⁿ 的快速幂算法,该算法体现的编程思想是( )。

{{ select(19) }}
- 枚举
- 贪心
- 分治
- 模拟
20|2026-06-L5-TF-10
归并排序和快速排序在平均情况下的时间复杂度均为 O(n log n)。但在稳定性方面,归并排序通常是不稳定的,而快速排序是稳定的。
{{ select(20) }}
- 正确
- 错误
21|2026-06-L5-SC-11
下面代码段实现了快速排序的划分操作(以首元素为基准),横线处代码应填入( )。

{{ select(21) }}
- swap(arr[low], arr[high])
- swap(arr[low], arr[i])
- swap(arr[i], arr[high])
- arr[i] = pivot
22|2026-06-L5-SC-12
下面哪句话最符合归并排序的思想?( )。
{{ select(22) }}
- 每次选择最小元素放到前面
- 将数组分成两半分别排序,再合并两个有序部分
- 相邻元素两两交换
- 从左到右把元素插入有序区
23|2025-03-L5-SC-10
考虑以下 C++ 代码实现的快速排序算法,将数据从小到大排序,则横线上应填的最佳代码是( )。


{{ select(23) }}
24|2025-03-L5-SC-14
函数 int findMax(int arr[], int low, int high) 计算数组中最大元素,其中数组 arr 从索引 low 到 high,( )正确实现了分治逻辑。
{{ select(24) }}
25|2025-06-L5-SC-14
关于下述 C++ 代码的快速排序算法,说法错误的是( )。

校注版说明(作答前常显):校注版:官网原题、代码与官方答案D永久保留。官网A把i误写为“大于基准值的元素的边界”,与代码中<=pivot分区冲突;B的“可以避免”也过强。学生版仅把A改为“小于等于基准值区间的右边界”,把B收窄为“降低遇到最坏O(n²)的概率”,C、D和判题答案D不变,使D成为唯一错误说法。
{{ select(25) }}
- 在 randomPartition 函数中,变量 i 的作用是记录小于等于基准值区间的右边界
- randomPartition 函数随机选择基准值,可以降低输入数据特定模式导致最坏情况下时间复杂度 O(n²) 的概率
- 快速排序平均时间复杂度是 O(n log n)
- 快速排序是稳定排序算法
26|2025-09-L5-SC-12
下述C++代码实现了归并排序算法,则横线上应填写( )。


{{ select(26) }}
- i < mid
- j < right
- i <= mid
- j <= right
27|2025-09-L5-SC-14
给定一个整数数组 nums,下面代码找到一个具有最大和的连续子数组,并返回该最大和。则下面说法错误的是( )。

{{ select(27) }}
- 上述代码采用分治算法实现
- 上述代码采用贪心算法
- 上述代码时间复杂度为O(n log n)
- 上述代码采用递归方式实现
28|2026-03-L5-TF-05
在一个数组中,如果两个元素a[i]和a[j]满足i<j且a[i]>a[j],则a[i]和a[j]是一个逆序对。下面代码可以正确统计数组a区间[l,r]内的逆序对总数。

{{ select(28) }}
- 正确
- 错误
29|2026-03-L5-SC-11
下面代码用分治求“最大连续子段和”,其时间复杂度为( )。

{{ select(29) }}
- O(n²)
- O(n log n)
- O(log n)
- O(n)
30|2026-06-L5-SC-13
在对长度为 n(n ≥ 1)的数组进行归并排序的过程中,mergeArray 函数(合并两个有序子数组的操作)被调用的次数是( )。

{{ select(30) }}
- n − 1
- log n
- n log n
- 2n
31|2025-09-L5-SC-11
下述C++代码实现了快速排序算法,下面说法错误的是( )。

{{ select(31) }}
- 快速排序之所以叫“快速”,是因为它在平均情况下运行速度较快,常数小、就地排序,实践中通常比归并排序更高效。
- 在平均情况下,划分的递归层数为log n,每层中的总循环数为n,总时间为O(n log n)。
- 在最差情况下,每轮划分操作都将长度为n的数组划分为长度为0和n - 1的两个子数组,此时递归层数达到n,每层中的循环数为n,总时间为O(n²)。
- 划分函数 partition 中“从右往左查找”与“从左往右查找”的顺序可以交换。







