【问题标题】:When to use which Sorting algorithm and when definitely shouldn't何时使用哪种排序算法,何时绝对不应该使用
【发布时间】:2011-12-20 10:14:50
【问题描述】:

我们看到了很多排序技术,例如合并、快速、堆。你能帮我决定在哪种环境中使用这些排序技术中的哪一种(就像问题中的那样)?我们什么时候应该使用这些排序算法中的哪一个,什么时候不应该使用(它们在时间和空间上的劣势)?

我期待以这种形式回答一些问题: a) 我们会在以下情况下使用合并排序... 我们绝对不应该在以下情况下使用合并排序... b) 我们会使用快速排序......我们绝对不应该使用快速排序......

【问题讨论】:

标签: c++ sorting complexity-theory


【解决方案1】:

有一些基本参数可以表征每种排序算法的行为:

  • 平均案例计算复杂度
  • 最坏情况下的计算复杂度
  • 内存要求
  • 稳定性(即是否为stable sort?)

所有这些都是widely documented for all commonly used sorts,这就是以您想要的格式提供答案所需的所有信息。然而,由于即使是每种类型的四个参数也会产生很多事情——并非所有这些都是相关的——需要考虑,因此尝试给出这样一个“脚本化”的答案并不是一个好主意。此外,还有更高级的概念可以考虑(例如在几乎排序或反向排序的数据上运行时的行为、缓存性能、对恶意构造的输入的抵抗力),使得这样的答案更加冗长且容易出错.

我建议您花一些时间熟悉上面提到的四个基本概念,也许是通过visualizing how each type of sort works 进行简单输入并阅读有关排序算法的介绍性文本。这样做,很快你就可以自己回答这些问题了。

【讨论】:

    【解决方案2】:

    对于初学者,请查看维基百科上的 comparison table,比较标准将为您提供有关在算法中寻找什么及其可能的权衡的线索。

    【讨论】:

      猜你喜欢
      • 2011-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-20
      • 2011-11-02
      • 2013-08-28
      • 1970-01-01
      相关资源
      最近更新 更多