c++oding="utf-8" ?>
std::sort采用内省排序(introsort),以quicksort为基线,递归过深时切heapsort,小数组用insertionsort优化,兼顾平均性能与O(n log n)最坏复杂度。

std::sort 用的是内省排序(introsort),不是纯快排
标准库实现不强制规定算法,但所有主流实现(GCC libstdc++、LLVM libc++、MSVC STL)都采用 introsort:它以 quicksort 为基线,在递归深度超限时切换到 heapsort,最后对小数组用 insertionsort 优化。这种组合是为了同时保证平均性能和最坏情况的 O(n log n) 时间界。
为什么不用纯快排?——最坏情况太危险
quicksort 在 pivot 选得极差时会退化到 O(n²),比如已排序数组 + 固定取首/尾元素作 pivot。真实场景中,恶意输入或特定数据分布可能触发该路径。而 introsort 通过限制最大递归深度为 2 × floor(log₂ n) 来检测异常,一旦超限就切到 heapsort,彻底规避退化。
将 WCAG 2 AA 无障碍标准应用于设计系统、UI 组件和网页——通过可运行的验证器进行对比度计算,采用设计 token 模式使颜色天生可访问,设定排版和焦点状态规则,并提供语义检查清单。适用于构建或审查 UI。
实际实现里还混了插入排序和分支预测优化
主流实现会在子数组长度 ≤ 某个阈值(如 GCC 是 16)时直接调用 insertionsort,因为小数组上它的常数项更优;同时,部分实现(如 libc++)还会在 partition 阶段用 __median_of_3 选 pivot,并加入分支预测提示(__builtin_expect)减少 pipeline stall。
-
std::sort不稳定,若需稳定排序请用std::stable_sort - 自定义比较函数必须满足严格弱序(strict weak ordering),否则行为未定义
- 迭代器必须是随机访问迭代器(
RandomAccessIterator),std::list::sort是特例,用的是归并
可以验证 introsort 行为的简单方式
虽然标准不暴露内部机制,但你可以构造一个深度可控的递归计数器 + 自定义 comparator 观察退化防护逻辑(注意:仅用于理解,勿在生产环境依赖):
std::vector
C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!










