快速排序一般是不稳定的。
快速排序的核心是划分(partition):选定基准,将数组分为小于和大于基准的两部分,再递归处理。注意最坏情况发生在数组已有序时。
快排在数组已有序时退化为O(n²)。选基准尽量用三数取中法避免最坏情况。分区时注意边界处理。
【考点】排序算法性质|算法稳定性分析|GESP 七级算法模块
命题人把这道题塞进试卷,就是要卡住那些只会背“快排快、归并慢”的考生。七级大纲明确要求区分“稳定”与“不稳定”排序,这题就是用来筛掉死记硬背的人。
看到“稳定性”三个字,先想“相对顺序能否保持”。快速排序的核心操作是“分区”,等值元素在分区过程中必然发生交叉交换——比如两个相同的键值,一个在基准左侧、一个在右侧,交换后顺序就乱了。快排分区时,基准元素与左右两侧元素不断交换,等值元素一旦被基准“跨过”,顺序就彻底乱了。这类题的通法是:先定位算法的核心操作(快排的分区、归并的合并、堆的建堆),再问“等值元素是否会被跨越交换”。记住,只要核心操作允许元素交叉移动,基本就是不稳定的。
选项 B 的“错误”是命题人精心设计的陷阱。很多考生会纠结“一般”这个词,误以为“一般不稳定”意味着“有时稳定有时不稳定”,从而想当然地选错。但命题人的逻辑是:快速排序的核心分区操作决定了它天生不具备稳定性,所以“一般”在这里是强调其“普遍性质”,而非“偶尔例外”。如果你只背结论“快排不稳定”,却忽视“一般”背后的语义陷阱,这道题就能把你拦下来。
把题干里的“快速排序”换成“归并排序”,答案立刻变 B;换“堆排序”或“冒泡排序”,答案又变 A。命题人玩的就是这个“换词不换理”的套路。刷到类似题时,先问自己“命题人想考我什么”——是考稳定性概念,还是考算法性质对比。