排序算法的记忆速度权衡

时间:2013-03-11 17:45:30

标签: performance algorithm sorting memory complexity-theory

仅考虑冒泡排序和合并排序。对于冒泡排序,时间复杂度将是O(n)到最差情况O(n ^ 2)和空间复杂度O(1)。对于合并排序,时间复杂度为O(nlogn),空间复杂度为O(n)。如果输入的大小小于1000,你会选择哪种?为什么?超过1000呢?

这是我的面试问题。只是想知道你们会怎么回答它。

1 个答案:

答案 0 :(得分:2)

  

仅考虑冒泡排序和合并排序。

小于1000,这可能意味着RAM足以用于没有外部存储的任何排序算法。这也意味着在这种情况下,时间复杂度的理论界限无关紧要。您可以选择任何您喜欢的排序算法,而不会产生任何时间损失。例如,您可以进行冒泡排序,因为它可能很容易实现。合并排序也同样好。

当输入大小大于1000时,可能假设时间复杂度很重要,即使没有外部存储,RAM也可能不够大。在这种情况下,如果你必须在两者之间进行选择,那么合并排序是一个安全的选择。这是因为合并排序比冒泡排序具有更好的最坏情况性能,并且合并排序是external sort的良好候选(当输入大小大于RAM时)。