什么是std :: sort()和std :: sort_heap()的内存复杂性?

时间:2014-10-09 19:37:49

标签: c++ c++11 big-o c++-standard-library space-complexity

与标题一样 - std::sort()std::sort_heap()的内存复杂性是多少? (后者需要std::make_heap()所以我也想知道它的内存复杂性。)

我尝试在这些网站上搜索:http://www.cplusplus.com/reference/ http://en.cppreference.com/w/但要么我错过了,要么只提及时间复杂度。是否在任何地方指定了所述函数的内存复杂性(在C ++标准或其他文档中)?或者这可能是依赖于实现的?

1 个答案:

答案 0 :(得分:1)

对于std::sort()我在Cboard上找到了一个答案,几乎说:

  

实施质量问题。不同的实现比其他实现更有效地使用内存。除此之外,该标准允许std::sort针对不同迭代器类别的特化,允许实现在几个不同选项之间进行选择,只要复杂性(时间)与需求相匹配即可。给出的复杂性甚至不是时间,而是比较的数量。实施可以执行N³交换操作。

大多数std::sort实现的内存开销与递归深度和每个递归级别存储在堆栈中的局部变量数有关。 std::sort的HP / Microsoft STL实现使用Quicksort直到/除非它检测到递归级别变得太深,在这种情况下它会切换到堆排序。如果大小很小,例如32或更小,那么它使用Insertionsort。

您可以在维基百科page中看到算法的比较,并估算内存复杂性。

同样,我怀疑其他两种算法属于同一种情况。