软件设计师 · 高频练习

以末元素为枢轴时,快速排序第一趟划分后的序列是什么?

中级 单选题 第 958 题 困难 软件设计师快速排序Lomuto划分枢轴排序算法
题目

对序列 [7,2,9,4,3] 做快速排序,明确采用 Lomuto 划分法:以末元素 3 为枢轴,从左到右扫描,把不大于枢轴的元素移到左侧,最后把枢轴放到分界位置。第一趟划分后的序列是()。

A [2,3,9,4,7]
B [3,2,9,4,7]
C [2,7,3,4,9]
D [2,3,4,7,9]
题目类型:原创高频练习题 用途:用于帮助理解软件设计师相关考点和答案解析,不等同于官方真题。
正确答案
A
答案解析

枢轴为 3。扫描 7 时不移动;扫描 2 时把它交换到左侧,序列暂为 [2,7,9,4,3];9 和 4 都大于 3。扫描结束后,将枢轴 3 与左侧分界后的 7 交换,得到 [2,3,9,4,7]。

选项分析

A

正确。枢轴3位于最终位置,左侧只有2,右侧9、4、7均大于3。

B

枢轴左侧仍有2,说明3没有放到本趟划分后的正确位置。

C

枢轴右侧出现了小于枢轴的元素2,不满足划分条件。

D

这是完全排序结果,不是一趟 Lomuto 划分的直接结果。

本题为什么容易错

快速排序存在多种合法划分实现,所以不写清枢轴位置和扫描规则的题目可能有多个中间序列。本题特意限定 Lomuto 法,答题时必须按指定算法模拟,不能拿自己熟悉的左右指针法套。

先看结论

简短答案

以末元素为枢轴时,快速排序第一趟划分后的序列是什么,正确答案是 A([2,3,9,4,7])。枢轴为 3。扫描 7 时不移动;扫描 2 时把它交换到左侧,序列暂为 [2,7,9,4,3];9 和 4 都大于 3。扫描结束后,将枢轴 3 与左侧分界后的 7 交换,得到 [2,3,9,4,7]。

解析

易混淆概念对比表

概念本题判断区别要点记忆提示
[2,3,9,4,7] 本题正确答案 正确。枢轴3位于最终位置,左侧只有2,右侧9、4、7均大于3。 看到题干核心场景时优先联想到它
[3,2,9,4,7] 本题干扰项 枢轴左侧仍有2,说明3没有放到本趟划分后的正确位置。 看到该词不要急着选,先判断是否真正解决题干问题
[2,7,3,4,9] 本题干扰项 枢轴右侧出现了小于枢轴的元素2,不满足划分条件。 看到该词不要急着选,先判断是否真正解决题干问题
[2,3,4,7,9] 本题干扰项 这是完全排序结果,不是一趟 Lomuto 划分的直接结果。 看到该词不要急着选,先判断是否真正解决题干问题
本题易混淆选项怎么区分
  • [3,2,9,4,7]:枢轴左侧仍有2,说明3没有放到本趟划分后的正确位置。
  • [2,7,3,4,9]:枢轴右侧出现了小于枢轴的元素2,不满足划分条件。
  • [2,3,4,7,9]:这是完全排序结果,不是一趟 Lomuto 划分的直接结果。
复习

知识点详解

Lomuto 划分通常选择末元素为枢轴,用一个边界维护已发现的小元素区间。扫描完成后,将枢轴与边界后的第一个元素交换。枢轴由此到达最终位置,随后对左右子序列递归。不同划分法的中间排列可能不同,但都要满足分区性质。

备考速记

一趟只定一个轴,左右分开不等于左右排好。

Lomuto划分 在排序算法场景中的作用

Lomuto划分在本题中的核心价值,是解决“对序列 [7,2,9,4,3] 做快速排序,明确采用 Lomuto 划分法:以末元素 3 为枢轴,从左到右扫描,把不大于枢轴的元素移到左侧,最后把枢轴放到分界位置。第一趟划分后的序列是()”这个场景问题。复习时不要只背选项名称,还要理解它为什么适用于该场景,以及它能解决哪类安全、流程或管理问题。

拓展

同类题怎么考

  • 给定枢轴和划分方法求一趟结果
  • 比较快速排序最好与最坏时间复杂度
  • 判断快速排序是否稳定及递归栈空间
Lomuto划分 在软件设计师软考中的考法

软考选择题通常不会只考概念定义,还会把Lomuto划分放到排序算法场景中,要求判断它的作用、适用范围或与相近概念的区别。遇到这类题时,先抓住题干中的业务场景,再看哪个选项最能解决该场景下的核心问题。

解题思路

先别追求一次排完。枢轴 3 的任务只是找自己的最终位置。比 3 小的只有 2,所以 2 被推到最左边;随后把 3 放在 2 后面。右边的 9、4、7 暂时什么顺序都可以,下一轮递归才处理。

考点定位

快速排序的一趟划分只保证枢轴就位、左侧不大于枢轴、右侧大于枢轴,并不保证左右两段内部已经有序。题目必须先确认采用哪种划分规则。

易错提醒

  • 把第一趟划分误认为整个序列已经排好
  • 扫描到小元素时只移动指针却没有交换
  • 最后忘记将枢轴换到分界位置

备考提示

  • 草稿上单独标出边界指针 i 和扫描指针 j,每次遇到不大于枢轴的元素才移动 i。
  • 先检查结果是否满足‘左小、轴定、右大’,再核对具体交换过程。

你可能还想了解

  • 快速排序第一趟后是否完全有序?
  • Lomuto划分和Hoare划分有什么区别?
  • 快速排序枢轴最后放在哪里?
  • 快速排序最坏情况什么时候出现?

本文小结

采用末元素 3 为枢轴的 Lomuto 划分,先把 2 移到左侧,再把枢轴放到分界位置,结果为 [2,3,9,4,7]。