algorithm - 使用稳定排序算法与使用原始索引来解决关系的不稳定排序相比有什么优势?

标签 algorithm sorting

稳定排序算法比不稳定排序慢。例如golang使用O(n*log(n)*log(n))调用交换元素。

如果我们的目标是保留元素的原始顺序,为什么不直接对它们进行编号 ( O(n) ),然后使用原始索引进行不稳定排序 ( O(n*log(n)) ) 来解决比较相等的情况。

这看起来更快。

O(n) + O(n*log(n)) < O(n*log(n)*log(n))

这是正确的吗? 有什么理由选择稳定排序吗?

最佳答案

除了缓存效应之外,当允许使用额外内存时,稳定排序通常比不稳定排序更快

您从 golang 链接到的稳定排序不使用额外的空间,因此它必须使用较慢的算法。当重要的是不使用额外的内存时,会使用不稳定排序,因为它们在大多数情况下几乎一样快并且不需要它。

如果您必须为索引分配额外的内存,那么您不妨使用快速稳定的排序。有很多方法可以使用相同数量的额外空间在 O(N log N) 时间内完成此操作。

关于algorithm - 使用稳定排序算法与使用原始索引来解决关系的不稳定排序相比有什么优势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58522500/

相关文章:

excel - 如何在 Excel 中计算 12,000 个单元格范围内的十分位数?

algorithm - 来自非线性概率的线性概率

python - 在 Python 中移动和合并列表元素的最有效方法 (2048)

algorithm - 是否有一种有效的算法来找到 "maximal connected set"?

algorithm - 博客让我的数学焕然一新(在实践中)

JavaScript,使用第二个参数排序更快

java - 我们如何在 Java 或 C++ 中生成给定二维矩阵的所有子矩阵?

ruby-on-rails - rails4 采摘顺序和限制

java - 对列表进行排序,同时将一些元素始终放在顶部

javascript - 使用 reverse() javascript 求和两个最高值