首页  >  文章  >  后端开发  >  为什么 Visual Studio 2015 对 std::list::sort() 从自下而上合并排序切换为自上而下合并排序?

为什么 Visual Studio 2015 对 std::list::sort() 从自下而上合并排序切换为自上而下合并排序?

Linda Hamilton
Linda Hamilton原创
2024-10-31 03:28:30674浏览

Why did Visual Studio 2015 switch from bottom-up to top-down merge sort for std::list::sort()?

std::list::sort() - 为什么突然切换到自顶向下策略?

在 Visual Studio 2015 中, std::list::sort() 的实现经历了从经典的自下而上合并排序到自上而下合并排序的重大变化。这种转变要求为每个递归级别找到列表的中点,从而导致明显的低效率。

更改的原因:

但是,如文档中所述在提供的更新中,Microsoft 进行了优化以保留无内存分配和异常安全修复,这些修复促使最初更改为使用迭代器。具体来说,递归实现:

  • 使用高效的合并排序,在每个递归级别将列表除以 2,而不是扫描列表。
  • 恢复为使用指针迭代器,有可能提高性能。
  • 实现拼接逻辑以改进一次多个节点的合并。

与自下而上归并排序的比较:

尽管进行了优化,但在处理大型、分散的链表时,由于缓存未命中增加,自上而下的方法仍然有可能比自下而上的合并排序慢。

替代实现:

提供了一种替代实现,它保留了自下而上的合并排序方法,同时使用迭代器而不是列表数组。这种方法的目的是避免在递归过程中总是必须找到列表的中点而对性能造成影响。

结论:

在 Visual 中切换到自上而下的合并排序Studio 2015 并非一时兴起。 Microsoft 实施了优化来解决潜在的低效率问题,同时保留异常安全和减少内存分配的优势。然而,对于大型、稀疏的链表,自下而上的合并排序方法仍然可以提供更好的性能。

以上是为什么 Visual Studio 2015 对 std::list::sort() 从自下而上合并排序切换为自上而下合并排序?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn