假设我需要从 1000000 个随机数值序列中检索中位数。
如果使用 除 std::list
的任何东西,我没有(内置)方法来对序列进行排序以进行中位数计算。
如果使用 std::list
,我不能随机访问值来检索排序序列的中间(中位数)。
自己实现排序并使用例如 std::vector
是否更好,或者使用 std::list
并使用 std::list::iterator
到中位数更好价值?后者似乎不那么开销,但也感觉更难看..
或者我有更多更好的选择吗?
原文由 sharkin 发布,翻译遵循 CC BY-SA 4.0 许可协议
任何随机访问容器(如
std::vector
)都可以使用标准std::sort
算法进行排序,该算法在<algorithm>
标头中可用。为了找到中位数,使用
std::nth_element
会更快;这足以将一个选定的元素放在正确的位置,但不能完全对容器进行排序。所以你可以找到这样的中位数: