【发布时间】:2021-12-08 00:24:34
【问题描述】:
www.cppreference.com 的文档说std::stable_sort() 的复杂性是
O(n * log(n)^2) [...]。如果有额外的内存可用,那么复杂度是 O(n * log(n))。
什么算法可以满足这个要求,指定的“额外内存”是多少?
【问题讨论】:
-
什么实现?任何合规。我猜大多数实现都使用某种形式的合并排序(或其变体),这需要一个额外的大小为 n. 的“数组”
-
由于任何符合要求的实现都符合定义,您是否想知道是否有任何实现使用额外的内存来降低复杂性?
-
@molbdnilo 我想知道什么样的算法(或上面提到的合并排序形式)会有这种复杂性,为什么它依赖于可用内存。
-
一般是归并排序。
inplace_merge有一个众所周知的线性时间 + 线性空间实现,还有一个众所周知的对数线性时间 + 对数空间实现,标准要求至少有那么好
标签: c++ algorithm sorting std c++-standard-library