为什么插入排序O(n ^ 2)更好地排序小数组~7元素。与O(nlogn)排序算法比较,如快速排序和合并排序?

时间:2017-12-22 18:04:03

标签: sorting quicksort mergesort insertion-sort

我看到了什么: 首先我读了这两篇SO帖子

  1. Why is Insertion sort better than Quick sort for small list of elements?

  2. Is there ever a good reason to use Insertion Sort?

  3. 但是 那里的答案对我来说还不够具体。

    从这两篇文章的答案中,他们主要指出,由于递归函数调用的额外开销,Merge Sort和Quick Sort可能会很慢。但我想知道具体的门槛7是如何设定的?

    我的问题:

    我想知道为什么截断大约是7个元素,其中像插入排序这样的二次排序算法比快速排序或合并排序等O(nlogn)排序算法更快。

      
        
    • 对小型子阵列使用插入排序。 Mergesort对微小的子阵列有太多的开销。
    •   
    • 截止到〜7个元素的插入排序。
    •   

    我从普林斯顿lecture slide得到了这个,我认为这是有信誉的来源。请参阅Mergesort:Practical Improvements部分下的第11张幻灯片。

    如果你的答案包含数学证明的例子,我将非常感激。

1 个答案:

答案 0 :(得分:3)

Big-O只记录了随着n变大而占主导地位的因素。它忽略了常数因子和较小的术语,它们几乎总是存在,并且当n很小时更为重要。因此,Big-O几乎无法用于比较只需要在微小输入上工作的算法。

例如,您可以使用带有t = 5n log n + 2n + 3等时间图的O(n log n)函数和时间图类似t = 0.5n^2 + n + 2的O(n ^ 2)函数。

比较这两个图,你会发现尽管有Big-O,O(n ^ 2)函数会稍微快一点,直到n达到大约13。