#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()函数仅被调用一次。

TF-04题干代码第1部分

TF-04题干代码第2部分

{{ 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

下面代码实现了归并排序。下述关于归并排序的说法中,不正确的是( )。

SC-09题干代码

{{ select(13) }}

  • 归并排序的平均复杂度是O(n log n)。
  • 归并排序需要O(n)的额外空间。
  • 归并排序在最坏情况的时间复杂度是O(n²)。
  • 归并排序适合大规模数据。

14|2025-12-L5-SC-10

下述C++代码实现了快速排序算法,最坏情况的时间复杂度是( )。

SC-10题干代码

{{ 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},下面是归并合并函数的核心循环,横线处应填入( )。

SC-12题干代码

{{ select(15) }}

  • A[i] >= B[j]
  • A[i] <= B[j]
  • i >= j
  • i <= j

16|2026-03-L5-SC-13

有n位同学的成绩已经从小到大排好序,现在对它执行下面这段以第一个元素为pivot的快速排序,请问此次排序的时间复杂度是( )。

SC-13题干代码

{{ select(16) }}

  • O(n)
  • O(n log n)
  • O(n²)
  • O(log n)

17|2026-06-L5-TF-04

在归并排序的合并操作中,如下代码片段可以正确地将两个已排序的子数组 L 和 R 合并回原数组 arr 中。

TF-04题干代码

{{ select(17) }}

  • 正确
  • 错误

18|2026-06-L5-TF-05

分治法通常将一个规模较大的问题拆分为若干个规模较小、结构相似的子问题,分别求解后再合并子问题的结果。

{{ select(18) }}

  • 正确
  • 错误

19|2026-06-L5-SC-07

下面代码实现了计算 xⁿ 的快速幂算法,该算法体现的编程思想是( )。

SC-07题干代码

{{ select(19) }}

  • 枚举
  • 贪心
  • 分治
  • 模拟

20|2026-06-L5-TF-10

归并排序和快速排序在平均情况下的时间复杂度均为 O(n log n)。但在稳定性方面,归并排序通常是不稳定的,而快速排序是稳定的。

{{ select(20) }}

  • 正确
  • 错误

21|2026-06-L5-SC-11

下面代码段实现了快速排序的划分操作(以首元素为基准),横线处代码应填入( )。

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++ 代码实现的快速排序算法,将数据从小到大排序,则横线上应填的最佳代码是( )。

SC-10题干代码第1部分

SC-10题干代码第2部分

{{ select(23) }}

  • SC-10选项A代码
  • SC-10选项B代码
  • SC-10选项C代码
  • SC-10选项D代码

24|2025-03-L5-SC-14

函数 int findMax(int arr[], int low, int high) 计算数组中最大元素,其中数组 arr 从索引 low 到 high,( )正确实现了分治逻辑。

{{ select(24) }}

  • SC-14选项A代码
  • SC-14选项B代码
  • SC-14选项C代码
  • SC-14选项D代码

25|2025-06-L5-SC-14

关于下述 C++ 代码的快速排序算法,说法错误的是( )。

SC-14题干代码

校注版说明(作答前常显):校注版:官网原题、代码与官方答案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++代码实现了归并排序算法,则横线上应填写( )。

SC-12题干代码第1部分

SC-12题干代码第2部分

{{ select(26) }}

  • i < mid
  • j < right
  • i <= mid
  • j <= right

27|2025-09-L5-SC-14

给定一个整数数组 nums,下面代码找到一个具有最大和的连续子数组,并返回该最大和。则下面说法错误的是( )。

SC-14题干代码

{{ 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]内的逆序对总数。

TF-05题干代码

{{ select(28) }}

  • 正确
  • 错误

29|2026-03-L5-SC-11

下面代码用分治求“最大连续子段和”,其时间复杂度为( )。

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 函数(合并两个有序子数组的操作)被调用的次数是( )。

SC-13题干代码

{{ select(30) }}

  • n − 1
  • log n
  • n log n
  • 2n

31|2025-09-L5-SC-11

下述C++代码实现了快速排序算法,下面说法错误的是( )。

SC-11题干代码

{{ select(31) }}

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