一尘不染

为什么在合并排序中的阈值交叉后应使用插入排序

algorithm

我到处都读过关于诸如Merge-Sort和的分治制排序算法Quicksort,而不是递归直到只剩下一个元素,最好转移到Insertion-Sort达到某个阈值(例如30个元素)时。很好,但是为什么Insertion-Sort呢?为什么不这样做,Bubble-SortSelection-Sort两者都有相似的O(N^2)性能呢?Insertion- Sort仅在对许多元素进行预排序时才应该派上用场(尽管该优势也应附带Bubble-Sort),但否则,为什么它比其他两个元素更有效?

其次,在此链接的第二个答案及其随附的评论中,它说O(NlogN)O(N^2)某一项相比,性能较差N。怎么会?N^2应该总是比N 差N log N,因为N > log N对于所有N> =2,对吗?


阅读 326

收藏
2020-07-28

共1个答案

一尘不染

  1. 实际上,插入排序至少比冒泡排序更快。它们的渐近运行时间相同,但是插入排序具有更好的常量(每次迭代更少/更便宜的操作)。最值得注意的是,它只需要对成对的元素进行线性交换,并且在每个内部循环中,它执行 n / 2个元素中的每个元素与可以存储在寄存器中的“固定”元素之间的比较(而冒泡排序必须从内存中读取值)。即,插入排序在其内部循环中的工作量少于气泡排序。
  2. 答案声称10000 Ñ LG Ñ > 10 Ñ ²为“合理” Ñ 。大约14000个元素都是如此。
2020-07-28