【问题标题】:Python sorting complexity on sorted list排序列表上的Python排序复杂度
【发布时间】:2014-05-22 14:31:22
【问题描述】:

Python 中的sort(already_sorted_list) 复杂度是多少? Python是否检查给定的迭代是否已排序,还是我必须自己做?我在文档中的任何地方都找不到它。

【问题讨论】:

  • 现在我需要查看 Tim-Sort 算法的完整实现。虽然答案是肯定的,但它会进行一些前瞻比较以确定某些内容是否已经排序或几乎排序。
  • 有一个很棒的wiki entry 讨论了许多 Python 函数的时间复杂度。

标签: python sorting


【解决方案1】:

完全依赖于实现。 python 所保证的只是内置排序算法是stable(比较相等的元素保留它们的相对顺序)。如果想要实现,甚至可以使用稳定的冒泡排序...

Cpython 使用TimSort(插入排序和合并排序的混合体),如果输入已经排序,我认为它具有 O(N) 复杂度——它获得了插入排序的最佳情况和最差情况的性能合并排序 (O(NlogN))。

如果您对实现感到好奇,source code 的描述非常好。

【讨论】:

  • 最佳情况:O(n),平均和最坏情况 O(nlogn)。
  • 至关重要的是,这意味着将sorted 应用于排序列表与预先检查它是否已排序一样有效
【解决方案2】:

Python 的排序称为timsort。它的平均案例性能是 O(nlog(n))。它在预先排序的列表中表现得非常好,因为它的实现旨在寻找列表中排序元素的运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-01
    • 2013-10-21
    • 1970-01-01
    • 2016-11-15
    相关资源
    最近更新 更多