FUSIONSORT_

融合排序 · run 探测 + 二分插入 + run 栈归并 + 三路划分 + 堆排兜底

稳定 O(n log n) 最坏 O(n log n) 最好 O(n)
数据分布
算法路径
规模 96 速度 36 fps
待机 点击播放开始
帧 0 / 0
未处理 天然 run 短 run / 插入 归并左段 归并右段 pivot / 等于区 堆排兜底 已写入
RUN 栈 0 个 run
尚未进入 run 探测
比较0
移动0
归并次数0
帧数0
计算耗时0 ms
进度0%
执行日志里程碑

① RUN 探测

线性扫描,连续升序直接成段;连续降序原地反转成升序。片段不足 minRun 时用二分插入排序补齐——小数组常数低、缓存友好。

② RUN 栈归并

维护 Timsort 不变量(A > B + C、B > C),满足即合并相邻 run。只有真正发生合并才开临时缓冲,左段优先写入保证稳定。

③ 兜底

三路划分把「小于 / 等于 / 大于」切开,重复值不再参与递归;递归深度超过 2·log₂n 立刻切堆排序,杜绝 O(n²)。重复率极高时计数排序直接收尾。

实测(本机 Node 20,单次测量,仅供量级参考)
数据FusionSort原生 sort说明
已排序 10 万8.7 ms—0 次归并,纯线性扫描
随机 20 万273 ms91 msJS 实现 + 每次合并申请缓冲
近乎有序 20 万80 ms13 ms天然 run 少,插入补齐开销小
仅 8 种值 20 万225 ms46 ms开「重复值预判」后走计数排序

演示版 minRun = 16(生产 Timsort 为 32–64),为了在一屏内看清 run 的合并过程。