何时使用哪种排序算法,何时绝对不应该

bru*_*ker 1 c++ sorting complexity-theory

我们看到很多排序技术,如Merge,quick,Heap.你能帮我决定在哪种环境中使用哪种排序技术(如问题所示)?我们什么时候应该使用哪种排序算法?哪些不是(它们在时间和空间上的缺点)?

我期待着答案的东西以这种形式:1)我们将使用合并排序的时候......我们绝对不应该使用合并排序时...... b)我们将使用快速排序的时候......我们绝对不应该使用快速排序时...

Jon*_*Jon 6

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

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

对于所有常用的排序,所有这些都被广泛记录,这是您需要以所需格式提供答案所需的所有信息.但是,由于每类甚至四个参数做出了很多东西-不是所有的这些都将是相关的-来考虑,它是不是一个很好的主意,试图给出这样的"照本宣科"的答案.此外,还有更高级的概念可以考虑(例如在几乎排序或反向排序的数据上运行时的行为,缓存性能,对恶意构造的输入的抵抗),使得这样的答案更加冗长且容易出错.

我建议您花一些时间熟悉上面提到的四个基本概念,也许通过可视化每种类型的排序如何在简单输入上工作并阅读有关排序算法的介绍性文本.这样做很快你就可以自己回答这些问题了.