You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

快速排序算法是否保证输出数组中相邻元素曾直接比较?

快速排序是否保证排序后相邻元素曾被直接比较?

结论:不能保证。

我们可以通过简单例子直观证明:

  • 待排序数组:[1, 3, 2, 4],以第一个元素作为基准执行快速排序:
    1. 首次选1为基准,与3、2、4分别比较,将1放到首位,数组拆分为[]、[1]、[3,2,4];
    2. 处理子数组[3,2,4],选3为基准,与2、4分别比较,将3放到正确位置,数组拆分为[2]、[3]、[4];
    3. 最终排序结果为[1,2,3,4]。

这里排序后的相邻元素1和2,在整个排序过程中从未直接比较过,但最终成为了相邻元素。

即使是你提到的N=2^k-1的场景(比如k=3,N=7),最优划分的快速排序依然存在这种情况:

  • 待排序数组:[4,1,3,2,6,5,7],每次选中位数作为基准:
    1. 首次选4为基准,划分出左子数组[1,3,2]和右子数组[6,5,7];
    2. 左子数组选3为基准,划分出[1,2];右子数组选6为基准,划分出[5];
    3. 最终排序结果为[1,2,3,4,5,6,7],其中1和2从未直接比较过,但排序后相邻。

本质原因是:快速排序的比较逻辑是元素仅会与基准元素直接比较,如果两个元素在某次划分中被基准分到不同的子数组,它们就永远不会有直接比较的机会,但在最终排序结果里,它们完全可能成为相邻元素。

内容的提问来源于stack exchange,提问作者George Robinson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 14:30:57