确定排序中比较次数的公式?

Formula for determining number of comparisons in a sort?

我很好奇是否有 formula/rule 可以找到排序算法中完成的比较总数,尤其是合并排序、选择排序和插入排序。我很确定选择排序的规则是 n(n-1)/2,其中 n 是要排序的元素数。我认为插入排序也是如此,但根据我进行的实践 Java 测试,显然情况并非如此(根据答案键,插入排序进行了 14 次比较和 15 次比较,其中包含 6 个项目)与选择排序进行比较)。所以现在我很困惑。

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

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

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

当然,没有 "one size fits all" 公式涵盖(比如说)相同复杂度的所有算法 class。


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