通常,更好的是:在某些集合中插入N个元素然后对其进行排序,或者在插入之前找到元素的正确位置并将其精确插入该位置(重复N次)?
答案 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)
取决于您的数据结构。请注意,为了在插入之前找到正确的位置,您必须以某种方式对元素进行排序,这要求它们已经存储在数据结构中。您能否提供有关您想要实现的目标的其他信息?