【问题标题】:Is selection sort an efficient algorithm?选择排序是一种有效的算法吗?
【发布时间】:2010-12-23 01:29:17
【问题描述】:

我知道这是一种二次时间算法,但它与其他排序算法(例如快速排序或冒泡排序)相比如何?

【问题讨论】:

    标签: sorting selection quicksort


    【解决方案1】:

    排序算法通常会根据您拥有的数据的性质而有所不同。

    但是,尽管冒泡排序和选择排序很容易理解(和实现)排序算法,但它们的运行时间是 O(n^2),即您可能遇到的最差时间。

    就平均而言,快速排序需要 O(n log n) 时间,因此它是一种出色的排序。但是,在某些情况下也可能需要 O(n ^ 2)。

    【讨论】:

    • 您总是可以访问列表的所有排列并返回恰好被排序的第一个排列 (O(n!)) :)
    【解决方案2】:

    二次时间算法,取决于您的数据集的大小,可能会慢得令人难以置信。

    n = 10e78(大约是宇宙中的原子数)

    对于二次算法,即 n*(10e78)。对于 nlog(n) 算法,如快速排序或合并排序,这是 n*262。这是一个巨大的差异。

    但是,如果您的数据集相对较小(例如,

    “过早的优化是万恶之源。” - Tony Hoare 爵士,由 Donald Knuth 推广

    【讨论】:

    • 这是一个愚蠢的例子。没有人会尝试对 10e78 个项目进行排序。 “64 万件物品对任何人来说都足够了”——比尔·盖茨
    • 我同意您帖子的第一部分,但我不认为选择适当/快速的排序算法是过早的优化。此外,只要系统的组件是松耦合的,那么排序算法在后期优化中应该是相当容易替换的。
    • 顺便说一句,我喜欢“宇宙中原子数”的例子,把一切都放在眼里:)
    • 这个例子是一位老 CS 教授在展示 log 运算符令人难以置信的微小时喜欢的一个例子,我相信在讨论 log(n) 访问时间时。你永远不会访问这么多数据,但即使你是,它也只有 O(262)!
    【解决方案3】:

    Wikipedia 无所不知。

    选择排序非常糟糕。

    【讨论】:

    • 几乎是的,但您的批评可能更具描述性:)
    【解决方案4】:

    如果您拥有的数据仅包含正整数,您可能需要查看桶排序。该算法在正确的条件下可以具有线性运行时间 O(n)。

    【讨论】:

      猜你喜欢
      • 2019-01-29
      • 2021-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-20
      • 2021-02-06
      • 2021-12-25
      • 2021-03-20
      相关资源
      最近更新 更多