Py算法与数据结构

12 简单排序算法

冒泡、选择、稳定选择和插入

对应本节 12 道题。点击题目展开答案和理由,保留此前生成的详细解析。
第 01 题 问题 1

教材右向左冒泡对 [3,1,2] 完成第一轮后是什么?

参考答案

[1,3,2]。

解析

先比较 1、2 不换;再比较 3、1 并交换,最小值浮到最左。

第 02 题 问题 2

优化冒泡何时可以提前结束?

参考答案

完整一轮没有发生任何交换。

解析

所有待处理相邻项均已满足顺序;changed 标记应在每轮开始重置。

第 03 题 问题 3

选择排序对 n=5 的列表进行多少次键比较?

参考答案

10 次。

解析

4+3+2+1=5×4/2;本教材实现不因已有序而提前结束。

第 04 题 问题 4

选择排序对 n≥1 的列表最多多少次非自交换?

参考答案

n−1 次。

解析

每轮最多交换一次,最小值本就在当前位置时可不交换。

第 05 题 问题 5

交换式选择排序对 [2A,2B,1X] 的第一轮结果是什么?

参考答案

[1X,2B,2A]。

解析

1X 与 2A 跨位置交换,打乱 2A、2B 的原相对顺序,是不稳定反例。

第 06 题 问题 6

把最小项取出并右移中间记录的选择变体为什么稳定?

参考答案

不采用跨越交换,并选择第一个最小值。

解析

右移保持其余记录相对次序,最小值插回固定位置;代价是更多写入。

第 07 题 问题 7

插入排序 [3,1,2],处理到索引 1 后是什么?

参考答案

[1,3,2]。

解析

暂存 1,右移 3,再把 1 填到索引 0。

第 08 题 问题 8

插入排序中把 > 改成 >=,稳定性会怎样?

参考答案

一般会失去稳定性。

解析

新来的相等键会跨到旧相等键之前;稳定实现只移动严格较大的项。

第 09 题 问题 9

升序输入上的插入排序复杂度及移动次数是什么?

参考答案

时间 O(n),右移次数为 0。

解析

每个 item 与前项比较一次即可;仍有外层循环与填回操作。

第 10 题 问题 10

逆序 n=4 的插入排序右移次数是多少?

参考答案

6 次。

解析

每对元素都形成逆序对,3+2+1=6。不把填回 item 的写入混在右移次数里。

第 11 题 问题 11

冒泡、选择、插入在教材中的稳定性分别是什么?

参考答案

稳定、不稳定、稳定。

解析

冒泡只交换严格逆序相邻项;选择有跨越交换;插入只移动严格较大项。

第 12 题 问题 12

“三者都是 O(n²),所以对近乎有序数据没有区别”对吗?

参考答案

不对。

解析

插入工作量可按 O(n+I) 描述,I 为逆序对数;选择仍进行固定数量比较。