std::list::sort() - 为什么突然切换到自顶向下策略?
在 Visual Studio 2015 中, std::list::sort() 的实现经历了从经典的自下而上合并排序到自上而下合并排序的重大变化。这种转变要求为每个递归级别找到列表的中点,从而导致明显的低效率。
更改的原因:
但是,如文档中所述在提供的更新中,Microsoft 进行了优化以保留无内存分配和异常安全修复,这些修复促使最初更改为使用迭代器。具体来说,递归实现:
与自下而上归并排序的比较:
尽管进行了优化,但在处理大型、分散的链表时,由于缓存未命中增加,自上而下的方法仍然有可能比自下而上的合并排序慢。
替代实现:
提供了一种替代实现,它保留了自下而上的合并排序方法,同时使用迭代器而不是列表数组。这种方法的目的是避免在递归过程中总是必须找到列表的中点而对性能造成影响。
结论:
在 Visual 中切换到自上而下的合并排序Studio 2015 并非一时兴起。 Microsoft 实施了优化来解决潜在的低效率问题,同时保留异常安全和减少内存分配的优势。然而,对于大型、稀疏的链表,自下而上的合并排序方法仍然可以提供更好的性能。
以上是为什么 Visual Studio 2015 对 std::list::sort() 从自下而上合并排序切换为自上而下合并排序?的详细内容。更多信息请关注PHP中文网其他相关文章!