我想对按顺序排列的元素进行排序,即我希望在下一个元素进入之前对我的向量进行排序。我知道插入排序的复杂性为n ^ 2,如果我总共有n个元素。合并排序应该更好。但是,通常认为合并排序具有复杂性n log n;但是我想如果你要一次排序n个元素就行了。如果他们一个接一个地来,你需要对临时矢量进行排序,那么复杂性就会达到\ sum_ {i = 2} ^ n i log(i)。这仍然不到我设想的n ^ 2,但绝对超过n log n。
这是对的吗?
由于
答案 0 :(得分:2)
编辑2 :
\sum_{i=1}^N i log i > \sum_{i=1}^N i = O(N²)
编辑:显然,你错过了这一点,所以我会试着澄清一下。
首先,将N个元素插入到数组中,同时确保在每次插入后对数组进行排序,可以在复杂度O(N²)中完成。您可以使用以下算法插入一个元素:
对N个插入重复此算法因此得到\ sum_i(i + log i)= O(N²)。
要非常清楚:这不是插入排序。插入排序将涉及通过重新插入所有元素来对整个数组进行排序,而此算法仅插入一个元素。
其次,执行此操作不能比O(N²)更快地完成:将一个元素插入到大小为i的数组中,同时保持数组排序的复杂度大于O(i),因为它涉及到i的移动元素。 根本没有解决这个基本事实的解决方法:如果您将1
插入[2,3,..,i]
,结果为[1,2,3,..,i]
,这意味着元素2,3。我有被移动。
因此,总数大于\ sum_i i = O(N²)。