是否对std :: sort进行了优化以便对少量项目进行排序?

时间:2015-07-17 08:58:12

标签: c++ algorithm sorting

有一种算法可以对7个比较中的5个项进行排序:here 如果为5个项目调用,std::sort()是否会使用该算法? 这个算法可以扩展到7项吗?在C / C ++中对7个整数进行排序的最快算法是什么?

3 个答案:

答案 0 :(得分:2)

如果std::sort尝试对小尺寸进行尽可能少的比较,则它不是标准的一部分。不同的实现可能会这样做,但这取决于您正在使用的库。

答案 1 :(得分:2)

查看MSVC ++ 2013 STL中std::sort的代码,它使用7个项目的插入排序。

有些评论建议使用排序网络。可以生成少量项目(最多32个)的网络排序here。特别是,对于没有并行性的7个项目的排序,最快的算法似乎是this。根据实验here,最快的SWAP宏实现是:

#define min(x, y) (x<y?x:y)
#define max(x, y) (x<y?y:x) 
#define SWAP(x,y) { \
    const int a = min(d[x], d[y]); \
    const int b = max(d[x], d[y]); \
    d[x] = a; d[y] = b; }

7个项目的分类网络代码为:

template<typename T> void sort7(T* d)
{
    SWAP(0, 1);
    SWAP(2, 3);
    SWAP(0, 2);
    SWAP(1, 3);
    SWAP(1, 2);
    SWAP(4, 5);
    SWAP(4, 6);
    SWAP(5, 6);
    SWAP(0, 4);
    SWAP(1, 5);
    SWAP(1, 4);
    SWAP(2, 6);
    SWAP(3, 6);
    SWAP(2, 4);
    SWAP(3, 5);
    SWAP(3, 4);
} 

答案 2 :(得分:0)

算法取决于实现。通常使用快速排序算法,即O(n log n)。