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