【问题标题】:What algorithm does python's sorted() use? [duplicate]python 的 sorted() 使用什么算法? [复制]
【发布时间】:2012-06-12 12:25:00
【问题描述】:

可能重复:
About python's built in sort() method

名字说明一切。

我试图向某人解释为什么他们应该使用 Python 的内置 sorted() 函数而不是滚动他们自己的函数,但我意识到我不知道它使用什么算法。

如果重要的话,我们说的是 python 2.7

【问题讨论】:

标签: python sorting


【解决方案1】:

Python 使用一种称为Timsort 的算法:

Timsort 是一种混合排序算法,源自归并排序和 插入排序,旨在在多种现实世界中表现良好 数据。它由 Tim Peters 于 2002 年发明,用于 Python 编程语言。该算法找到数据的子集 已经排序,并使用子集对数据进行更多排序 有效率的。这是通过合并一个已识别的子集来完成的,称为 运行,使用现有运行,直到满足某些条件。蒂姆索特 自 2.3 版本以来一直是 Python 的标准排序算法。它是 现在也用于在 Java SE 7 和 Android 上对数组进行排序 平台。

【讨论】:

  • 这是一个非常令人印象深刻的算法:OP 的朋友很难自己开发出更好的东西。
  • 它不仅使用了非常聪明的算法,而且还用手工优化的 C 语言实现了它。即使你自己通过将伪代码翻译成 Python 来实现它,它也会慢一个数量级并且更需要内存。
  • 一篇有趣的论文说它在 TimSort 中发现了一个错误(并提供了修复):envisage-project.eu/…
  • @bgporter 确切地说,该错误不在 Timsort 中,而是在其参考实现中。根据Wikipedia article,已经修复了。
【解决方案2】:

排序算法称为 Timsort。见timsort

【讨论】:

    【解决方案3】:

    从 2.3 Python 开始使用 timsort。

    更多信息:http://bugs.python.org/file4451/timsort.txt

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-31
      • 1970-01-01
      • 2020-04-02
      相关资源
      最近更新 更多