据我所知,inplace_merge与sort完全相同,只是它只适用于某些情况(当容器已经在两个已排序的部分时)。
换句话说,这两者之间是否存在差异:
int first[] = {1,3,5,7};
int second[] = {2,4,6,8};
vector<int> v(8);
vector<int>::iterator it;
copy(first,first+4, v.begin());
copy(second,second+4, v.begin()+4);
inplace_merge(v.begin(), v.begin()+4, v.end())
int first[] = {1,3,5,7};
int second[] = {2,4,6,8};
vector<int> v(8);
vector<int>::iterator it;
copy(first,first+4, v.begin());
copy(second,second+4, v.begin()+4);
sort(v.begin(), v.end())
唯一的区别是效率吗?
答案 0 :(得分:9)
它们的复杂性并不相同:
sort()的情况最差为O(N²)
,具体取决于您的STL实施所使用的排序算法。
inplace_merge()的最差情况为O(N*log(N))
,最佳情况为O(N-1)
,因此它永远不会慢于sort()
(使用相同的输入)
另外,正如其他人所指出的,inplace_merge()
是stable:它保留了排序键相同的项目的排序。 sort()
并不能保证这一点。 stable_sort()确实如此,其最坏情况的复杂性为O(N*log(N)²)
。
答案 1 :(得分:5)
两个不同之处:
inplace_merge
是一个稳定的算法(它将在两个原始范围之间的子范围和中以相同的顺序 保持相同的项目。)int
egers的容器,您不会发现任何差异:)inplace_merge
必须以不同的方式实现,因此可能更有效。这个函数存在的唯一事实很多。答案 2 :(得分:3)