第 10 题
对关键码序列 28,16,32,12,60,25,72 快速排序,从小到大一次划分结果为( )。
A. (2,5,12,16) 28 (60,32,72) B. (5,16,12) 28 (60,32,72) C. (2,16,12,5) 28 (60,32,72) D. (5,16,2,12) 28 (32,60,72)
[tag_link]
正确答案:B
快速排序的一次划分通常以序列的第一个元素作为基准(pivot)。
对于序列 28,16,32,12,60,25,72,选择 28 作为基准,目标是将序列划分为左边所有元素小于 28,右边所有元素大于 28。 常见划分方法(如 Lomuto 划分)的步骤如下:
- 从左向右扫描,将小于 28 的元素移动到左侧,大于等于 28 的元素留在右侧。 >
- 最终交换基准元素到正确位置。 >
具体过程:初始化基准为 28。 > 遍历序列,小于 28 的元素有 16、12 和 25。 > 通过交换操作,划分后基准 28 位于中间位置,左边为小于 28 的元素(顺序可能改变),右边为大于 28 的元素。 > 划分结果为左边序列 (25,16,12),基准 28,右边序列 (60,32,72)。 >
观察选项,B 选项为 (5,16,12) 28 (60,32,72),其中左边有三个元素,与小于 28 的元素个数一致; > 右边为 (60,32,72),与大于 28 的元素一致。 > 虽然 B 中写为“5”,但根据序列元素推断应为“25”(可能为笔误),且其他选项左边元素个数不符合要求,因此 B 为正确答案。 >