Skip to content

2012年 408 数据结构 第 11 题

数据结构2012年选择题2分

题目

对同一待排序序列分别进行折半插入排序和直接插入排序,两者之间可能的不同之处是()。

错因

A

误以为折半"快"会减少趟数。但插入排序的趟数 = 待插入元素数 = ,与"如何找位置"完全无关——每趟都要把一个新元素插到已排序部分。无论是直接插入(顺序找)还是折半插入(二分找),都得这么走 趟。

B

误以为折半找到位置后能少移动。移动次数取决于位置,不取决于查找方式——找到位置后,把目标位置之后的元素全部右移 1 位是物理必然,与你怎么找到这个位置无关。直接插入和折半插入的元素移动总次数完全相同。

C

误以为折半需要额外的辅助空间。两者都只需要 1 个临时变量缓存当前要插入的元素(temp = a[i]),空间复杂度都是 。折半的"二分查找"逻辑在原数组上做不需要额外空间。

总解析

直接插入 vs 折半插入的差异点:唯一不同的是查找插入位置的方式——

  • 直接插入:从已排序段尾部往前线性扫描,找到合适位置( 当前值的第一个位置)。第 趟最坏比较 次,最好 1 次。
  • 折半插入:在已排序段上二分查找插入位置。第 趟比较次数固定 (不论数据初始顺序)。
维度直接插入折半插入
总趟数 ✓ 相同
元素移动次数同位置同移动同位置同移动 ✓ 相同
辅助空间 ✓ 相同
比较次数最坏 、最好 始终 不同

为什么只有比较次数不同

  • 比较次数取决于"查找过程怎么走"——直接插入逐个比,折半插入按 收敛
  • 移动次数取决于"找到位置后要挤开几个元素"——位置一样移动量一样
  • 趟数取决于"要插入的元素数量"——都是
  • 辅助空间取决于"暂存当前元素"——一个变量足够

速记:折半插入的优势只有"比较次数少"——但这个优势在大 时并不显著,因为移动开销没变,整体仍是 。教材里折半插入主要是用来对比"二分思想能否提速排序"的反例(答案:单纯改查找无济于事,得改"分治+合并"才行,那就是归并排序了)。

最终答案是 D

最后更新:

🎬 可视化演示
加载中...

提示:可在可视化区直接操作播放、步进、修改参数