【问题标题】:data structures sorting数据结构排序
【发布时间】:2010-12-17 19:56:32
【问题描述】:

如果我们有 n 个元素的键:{0,1,-1} 并且我们想要对它们进行排序,那么在最坏的情况下我们至少有多少比较?

【问题讨论】:

  • 听起来像是功课。此外,您需要详细说明问题。
  • 您说“使用键 {0, 1, -1}”是什么意思?
  • 当我们想用一些键对卡片进行排序时,我们可以通过键对它们进行排序,而不是用它们的值排序

标签: algorithm sorting data-structures


【解决方案1】:

这是一个在 O(n) 中运行的解决方案:

  1. 创建一个包含三个列表的数组。
  2. 对于每个键/值条目,执行

    lists[entry.key + 1].append(entry)
    
  3. 将三个列表连接成一个长列表。

这样你就没有键之间的比较了。

【讨论】:

  • 你需要比较一个元素是否=-1、0,否则为1。那么2n?
  • 好的,当然。然后进行 ϑ(n) 比较。 (但不同键之间没有比较。)
【解决方案2】:

使用少量固定数量的可能值,您可以使用 counting sort 之类的线性时间排序。

【讨论】:

  • 我怎样才能用线性时间做到这一点?
【解决方案3】:

这取决于使用的算法和元素的分布。

【讨论】:

  • 关于排序的下界和决策树模型,
  • 当他说“最坏情况”时,他的意思可能是“最佳算法的最坏情况”。