algorithm - 插入排序中比较的确切数量

标签 algorithm sorting insertion-sort

我想获得 {1, ..., n} 的排列数,插入排序正好进行 n(n-1)/2 次比较。 例如,对于 {1, 2, 3, 4} 我们得到 (4, 3, 2, 1), (3, 4, 2, 1), (4, 2, 3, 1) 等 - 对于所有他们 InsertionSort 进行 4*3/2 = 6 次比较。 有人知道一些确切的公式吗? 我正在考虑类似 (n-1) + 1 = n 的问题,其中 1 代表逆序,然后我们可以逆序交换所有 (n-1) 对。

最佳答案

这是一个提示。 (1, 2, 3, 4) 的完整列表是:

(4, 3, 2, 1)
(3, 4, 2, 1)
(4, 2, 3, 1)
(2, 4, 3, 1)
(4, 3, 1, 2)
(3, 4, 1, 2)
(4, 1, 3, 2)
(1, 4, 3, 2)

从最后一列到第一列看。

逐步了解插入排序。查看它们合并的位置。你看到那里的模式了吗?

反过来,你能猜出我是如何生成这个列表的吗?你能证明这个列表是完整的吗?

为什么在这里很重要。就说2<sup>n-1</sup>没用。

关于algorithm - 插入排序中比较的确切数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42230741/

相关文章:

string - 对某些情况的按位运算澄清

javascript - 对 Javascript 数组进行排序

java - 插入排序的实现差异

algorithm - 找到只有 2 个随机点和凸起的圆心(x 和 y 位置)

java - 插入排序,比较次数

java - 添加到单链表时自动按字段对对象进行排序?

Java 字符串数组插入排序

java - twosorts 只给我一个问题

algorithm - 二维叉积定义

java - 按日期对 HashMap 进行排序