Appearance
题目
选择一个排序算法时,除算法的时空效率外,下列因素中,还需要考虑的是( )。
Ⅰ. 数据的规模 Ⅱ. 数据的存储方式 Ⅲ. 算法的稳定性 Ⅳ. 数据的初始状态
错因
A
只盯到稳定性这一个最常被强调的"软"指标,忽略了规模、存储方式、初始状态对实际算法选择的影响也都很大。考研题里"稳定性"出现频次高,所以学生容易先入为主只勾Ⅲ。
B
只考虑硬件相关的"硬"指标——规模和存储方式,把稳定性和初始状态当成"次要因素"。但实际工程里,二级排序键的稳定性、近乎有序数据触发插入排序的最佳路径都是真实场景。
C
漏了 Ⅰ。可能错把"规模"当成已经被"时空效率"涵盖(题干已明说"除时空效率外"),属于审题不仔细。
总解析
逐条分析:
Ⅰ. 数据的规模:n 很小时(如 n < 50),简单排序(直接插入、冒泡)的常数因子小、实际反而更快;n 大时才用 的高级排序(快排、归并、堆)。规模决定算法是该选低复杂度还是低常数。✓
Ⅱ. 数据的存储方式:顺序存储和链式存储能用的算法不同。例如快速排序需要随机访问下标,在链表上效率退化;归并排序在链表上反而无需额外空间,更友好。✓
Ⅲ. 算法的稳定性:当排序键有重复且要求"原相对顺序保持"(如先按部门后按姓名的二级排序),必须用稳定算法(归并、冒泡、直接插入),不能用不稳定的(堆排、快排、简单选择、希尔)。✓
Ⅳ. 数据的初始状态:近乎有序数据上插入排序接近 最佳;逆序数据上简单快排(首元素作 pivot)退化为 ;不同初始状态对算法的实际表现影响巨大。✓
四项全都要考虑。最终答案是 D。