【发布时间】:2019-05-06 13:37:58
【问题描述】:
我很好奇是否有公式/规则来查找排序算法中完成的比较总数,特别是合并排序、选择排序和插入排序。我很确定选择排序规则是n(n-1)/2其中n 是被排序的元素数。我认为插入排序的情况也是如此,但根据我进行的 Java 练习测试,显然情况并非如此(根据答案键,插入排序有 6 个项目的列表进行了 14 次比较,并与选择进行了 15 次比较种类)。所以现在我很困惑。
【问题讨论】:
-
没有。您可以编写一个计数比较器并使用它来测试这两种算法。如果没有看到实现,我们怎么知道?另外,大哦记法也不是传统意义上的公式。
-
好吧,我指的是如果您在纸上可视化选择排序/合并排序/插入排序。使用每种排序算法背后的原理,我确信有一个规则可以找到数字之间进行的比较次数。 @ElliottFrisch
-
我选择radix sort。比较次数为零。在那里,这是一个规则。从链接中,反对论点是基于比较的算法是根据比较次数来衡量的,而不是实际的时间复杂度。在某些假设下,比较的平均时间是恒定的,而在其他假设下则不会。随机生成的密钥的比较平均需要恒定的时间,因为在一半情况下密钥在第一位不同,在剩余一半情况下第二位不同,依此类推
标签: java sorting merge selection insertion