【问题标题】:Explaining average time complexity of Bubble Sort [duplicate]解释冒泡排序的平均时间复杂度
【发布时间】:2015-05-17 00:41:49
【问题描述】:

我知道冒泡排序的平均时间复杂度为 O(n^2)。谁能解释如何计算这种复杂性?我通常发现只有人们说这是平均复杂性,但我不知道为什么。 (换句话说,数字从 1 到 n 的随机排列的平均复杂度是多少)

【问题讨论】:

  • @AndrewMorton 我想我无法理解我怎么知道这些针对最坏情况的计算(= 我必须交换每个元素)是针对平均情况的计算?也就是说,在这个计算中如何表示n个数的随机排列?
  • @Superian007:作为起点,Knuth 的计算机编程艺术在第 5.2.2 节中处理了冒泡排序,其中的 eq(11) 给出了平均情况下所需的 O(n²) 交换。 (是的,我知道,外部引用不适合 SO,但我必须重新阅读 5.1 和 5.2 来总结论点。)

标签: big-o time-complexity bubble-sort


【解决方案1】:

如果复杂度为 O(n^2),则表明算法必须对输入的两个元素的每个组合执行一些操作。

首先,请注意冒泡排序会比较相邻的项目,如果它们无序则交换它们。

最佳 的情况下,冒泡排序是 O(n)。这是列表已经排序的时候。它可以遍历列表一次,并且只需要在确定它已经排序之前将每个项目与其邻居比较一次。

O(n^2) 是冒泡排序的最坏情况。这是输入列表已经反向排序的时候。想想算法如何将第一项从索引0 移动到它在索引n-1 处的排序位置。它必须将该项目与其他所有项目进行一次比较(n 次操作)。它对每个项目重复这个过程,因此 O(n^2)。

【讨论】:

  • 但是如何计算平均复杂度呢?我怎么知道它会和最坏的复杂度一样?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-09
  • 2015-06-15
  • 2012-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多