Sorting 插入的复杂性
我有一个排序向量, 更好的是: 使用lower_bound并在向量中的位置插入元素。Sorting 插入的复杂性,sorting,c++11,vector,insert,Sorting,C++11,Vector,Insert,我有一个排序向量, 更好的是: 使用lower_bound并在向量中的位置插入元素。 或者简单地将元素推回到向量中,并在需要时使用sort()对其进行排序?对于执行一次的单个操作,使用下限和插入更便宜下限是O(log(n))和插入将是(最坏和平均情况)O(n),最终复杂性为O(n) 如果在插入向量之后才需要对向量进行排序,那么只排序一次会便宜得多,因为所有的push_s将是O(1)*O(n)=O(n),最后的排序将是O(n*log(n)),最终的复杂度为O(n*log(n)),而多重下限+插入将
或者简单地将元素推回到向量中,并在需要时使用sort()对其进行排序?对于执行一次的单个操作,使用
下限
和插入
更便宜<代码>下限是O(log(n))
和插入
将是(最坏和平均情况)O(n)
,最终复杂性为O(n)
如果在插入向量之后才需要对向量进行排序,那么只排序一次会便宜得多,因为所有的push_
s将是O(1)*O(n)=O(n)
,最后的排序将是O(n*log(n))
,最终的复杂度为O(n*log(n))
,而多重下限
+插入
将使您的复杂性为O(n)*O(n)=O(n**2)
如果您需要在整个插入过程中对元素进行排序,那么哪个更便宜将在很大程度上取决于您的使用模式(需要对元素进行排序的频率和时间)。通常情况下,您只需要在构建过程结束时对元素进行排序,这就是为什么在构建过程结束时进行排序可以成为工具带中非常强大的工具。如果这不是你的使用模式,你可能想至少考虑使用一个关联的容器,如<代码> MulySub 或
C++03
和C++98
中的lower\u-bound
、insert
、push\u-back
和sort
之外,我在这个问题上看不到任何特别相关的东西。其他一切都是通用算法分析。谢谢。在我的例子中,下界和插入可以提供更快的性能。