在我的程序的关键路径中,我需要对数组进行排序(特别是C++ std::vector,使用gnu c++标准libray)。我使用的是标准库提供的排序算法(std::sort),在本例中是内向排序。
我对这个算法的性能很好奇,在对不同标准和第三方库使用的各种排序算法进行研究时,几乎所有这些算法都关心“n”往往是主导因素的情况。
在我的具体情况下,'n‘将在2-20个元素的顺序上。所以常量因素实际上可以占主导地位。当我们正在排序的整个数组符合两个缓存行时,像缓存效果这样的事情可能会非常不同。
对于常量因子很可能压倒渐近因子的情况,最佳排序算法是什么?这些算法是否有经过审查的C++实现?
发布于 2022-06-27 22:46:35
Introsort考虑到了您的关注,并切换到短序列的插入排序实现。
由于您的STL已经提供了它,您可能应该使用它。
发布于 2022-06-27 21:29:27
插入排序或选择排序对于小型数组(即少于10-20个元素)来说通常都更快。
发布于 2022-06-28 12:32:48
观看https://www.youtube.com/watch?v=FJJTYQYB1JQ
简单的线性插入排序非常快。首先创建一个堆可以稍微改进它。
遗憾的是,这个话题并没有与<= 15元素的硬编码解决方案进行比较。
https://stackoverflow.com/questions/72778474
复制相似问题