【问题标题】:Average case complexity analysis of insertion and bubble sort插入和冒泡排序的平均案例复杂度分析
【发布时间】:2018-05-09 21:14:35
【问题描述】:

这个网站已经有一些关于这个主题的问题,但我在阅读了一些答案后感到困惑。

https://cs.stackexchange.com/questions/20/evaluating-the-average-time-complexity-of-a-given-bubblesort-algorithm

在上面的链接中,“Joe”的回答说,冒泡排序中的平均交换次数与平均反转次数相同,即 (n)(n-1) / 4。

但是,Insertion sort vs Bubble Sort Algorithms 表示在冒泡排序中平均交换次数为 n^2 /2,在插入排序中为 n^2/4,这就是插入排序优于冒泡排序的原因。

哪一个是正确的?有人可以帮帮我吗?

【问题讨论】:

  • 每个来源如何定义平均情况?这些比较可能是苹果对橘子。最好和最坏的情况至少是可以证伪的。 “平均”以分布为前提。
  • @Patrick87 第二个链接呢?它说平均插入排序胜过冒泡排序。答案也有很多赞成票。对吗?
  • 这两个平均掉期次数都在彼此相同的范围内。为什么你甚至需要使用这两种排序方法而不是像合并排序或快速排序这样的分而治之的方法?
  • 链接的答案假定输入的所有排列之间是均匀分布的。在实践中可能并非如此,实践输入通常不是均匀分布的。请明确指定您感兴趣的发行版。
  • @Zephyr 实际上,我可以举一个例子说明插入排序优于冒泡排序。这恰好是两种算法都将在O(n) 时间运行的情况。不知道这是否是您正在寻找的。​​span>

标签: algorithm sorting time-complexity


【解决方案1】:

假设均匀分布,您的第一个链接计算预期的反转次数(即交换)。

您的第二个链接是计算迭代次数,即检查元素。

两者都是正确的。

【讨论】:

    猜你喜欢
    • 2015-05-17
    • 2013-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-23
    • 2020-09-28
    • 1970-01-01
    相关资源
    最近更新 更多