【问题标题】:Formula for determining number of comparisons in a sort?确定排序中比较次数的公式?
【发布时间】:2019-05-06 13:37:58
【问题描述】:

我很好奇是否有公式/规则来查找排序算法中完成的比较总数,特别是合并排序、选择排序和插入排序。我很确定选择排序规则是n(n-1)/2其中n 是被排序的元素数。我认为插入排序的情况也是如此,但根据我进行的 Java 练习测试,显然情况并非如此(根据答案键,插入排序有 6 个项目的列表进行了 14 次比较,并与选择进行了 15 次比较种类)。所以现在我很困惑。

【问题讨论】:

  • 没有。您可以编写一个计数比较器并使用它来测试这两种算法。如果没有看到实现,我们怎么知道?另外,大哦记法也不是传统意义上的公式。
  • 好吧,我指的是如果您在纸上可视化选择排序/合并排序/插入排序。使用每种排序算法背后的原理,我确信有一个规则可以找到数字之间进行的比较次数。 @ElliottFrisch
  • 我选择radix sort。比较次数为零。在那里,这是一个规则。从链接中,反对论点是基于比较的算法是根据比较次数来衡量的,而不是实际的时间复杂度。在某些假设下,比较的平均时间是恒定的,而在其他假设下则不会。随机生成的密钥的比较平均需要恒定的时间,因为在一半情况下密钥在第一位不同,在剩余一半情况下第二位不同,依此类推

标签: java sorting merge selection insertion


【解决方案1】:

一般来说,没有精确的公式有几个原因:

  1. 在实现各种排序算法时有足够的变化空间,同一算法的不同实现之间可能存在细微差异。

  2. 对于某些算法,比较次数取决于元素及其初始顺序。

当然,没有“一刀切”的公式可以涵盖(比如说)同一复杂性类别中的所有算法。


一条线索:如果排序算法的最佳情况或最坏情况复杂度不同于其平均复杂度,那么比较次数或移动次数取决于输入。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多