我看到了什么: 首先我读了这两篇SO帖子
Why is Insertion sort better than Quick sort for small list of elements?
但是 那里的答案对我来说还不够具体。
从这两篇文章的答案中,他们主要指出,由于递归函数调用的额外开销,Merge Sort和Quick Sort可能会很慢。但我想知道具体的门槛7是如何设定的?
我的问题:
我想知道为什么截断大约是7个元素,其中像插入排序这样的二次排序算法比快速排序或合并排序等O(nlogn)
排序算法更快。
- 对小型子阵列使用插入排序。 Mergesort对微小的子阵列有太多的开销。
- 截止到〜7个元素的插入排序。
我从普林斯顿lecture slide得到了这个,我认为这是有信誉的来源。请参阅Mergesort:Practical Improvements部分下的第11张幻灯片。
如果你的答案包含数学证明的例子,我将非常感激。
答案 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。