分析stable_sort

时间:2015-05-30 17:17:42

标签: c++ sorting memory in-place

这个page告诉我,只要没有足够的内存,stable_sort就会缩减为具有运行时间O(n(log n)(log n))的就地算法:

  

<子>的复杂性

     

如果有足够的额外内存可用,则在第一个和最后一个之间的距离为linearithmic:执行最多N * log 2 (N)个元素比较(其中N是此距离),并且直到那么多元素的移动。   否则,该距离内的多线性:执行N * log 2 2 (N)元素比较,最多执行那么多元素交换。

我希望将其与另一个具有相同运行时间的就地算法进行分析,因此我的问题简化为:我如何模拟&#34;内存不足&#34;以便在stable_sort

中执行较慢的算法

1 个答案:

答案 0 :(得分:6)

cplusplus.com非常糟糕......看cppreference.com的描述here

  

此函数尝试通常通过调用std :: get_temporary_buffer来分配与要排序的序列大小相等的临时缓冲区。如果分配失败,则选择效率较低的算法。

get_temporary_buffer是:

template< class T >
std::pair< T*, std::ptrdiff_t > get_temporary_buffer( std::ptrdiff_t count )

因此,虽然从技术上来说,它将在std命名空间中专门为您自己的类专门化它,但您可能不会为生产代码执行此操作,并且在实践中它极可能可靠地工作并且会让你拦截内存请求并返回失败。

namespace std
{
    template <>
    std::pair<My_Class*, std::ptrdiff_t>
    get_temporary_buffer(std::ptrdiff_t)
    { return {0, 0}; }
}