什么是更快:排序n个元素,或在正确的位置逐个插入n个元素?

时间:2012-08-31 17:16:35

标签: algorithm sorting

通常,更好的是:在某些集合中插入N个元素然后对其进行排序,或者在插入之前找到元素的正确位置并将其精确插入该位置(重复N次)?

4 个答案:

答案 0 :(得分:6)

对使用中的数据结构和应用程序非常依赖

请注意,在数组中插入元素需要将所有以下元素向右移动,这会导致O(n)插入。 然而,Binary Search Tree允许插入O(logn),但比数组的效率低cache - 因此速度较慢。

另一方面,在插入最后一个元素[O(nlogn)排序]之后插入然后排序会导致高 latency
另外 - 如果您要经常查询 - 但很少添加元素 - 您希望避免过于频繁地排序 - 并且按顺序保持元素是实现此目的的简单方法。

答案 1 :(得分:1)

不对输入做任何假设,排序需要nlog(n)时间。插入元素需要O(n)时间(链表)。因此,在所有插入后排序更快。

答案 2 :(得分:1)

这是更好的

  

“在某些集合中插入N个元素然后对其进行排序”

因为可以使用O(nlogn)算法进行排序。在哪里

  

“在插入和插入之前找出元素的正确位置   它恰好在那个地方(重复N次)?“

是插入排序,以O(n^2)的最坏情况而闻名。

也就是说,插入排序是在线算法。即您无需事先知道整个数据即可开始排序。考虑由并行运行的其他程序生成的数据。插入排序很有意义。其他方法需要整个数据到位。

答案 3 :(得分:0)

取决于您的数据结构。请注意,为了在插入之前找到正确的位置,您必须以某种方式对元素进行排序,这要求它们已经存储在数据结构中。您能否提供有关您想要实现的目标的其他信息?