algorithm - 对非常小的列表进行排序的快速算法实现

标签 algorithm performance sorting sorting-network

这是我很久以前遇到的问题。 我想我可以问问你的想法。 假设我有非常小的数字(整数)列表,4 或 8 个元素,需要快速排序。 什么是最好的方法/算法?

我的方法是使用最大/最小函数(10 个函数对 4 个数字进行排序,没有分支,iirc)。

// s(i,j) == max(i,j), min(i,j)
i,j = s(i,j)
k,l = s(k,l)
i,k = s(i,k) // i on top
j,l = s(j,l) // l on bottom
j,k = s(j,k)

我想我的问题更多地与实现有关,而不是算法类型。

此时它变得有点依赖于硬件,所以让我们假设 Intel 64 位处理器和 SSE3。

谢谢

最佳答案

对于像这样的小数组,您可能应该查看 sorting networks .正如您在该页面上看到的那样,插入排序可以表示为排序网络。但是,如果您事先知道数组的大小,则可以设计出最佳网络。看看this site这可以帮助您找到给定大小的数组的最佳排序网络(尽管我认为最佳只能保证最大为 16)。比较器甚至在可以并行完成的操作中组合在一起。比较器本质上与您的 s(x,y) 函数相同,但如果您真的希望它更快,则不应使用 min 和 max,因为这样您就需要进行两倍的比较。

如果您需要这种排序算法适用于各种大小,那么您可能应该像其他人建议的那样使用插入排序。

关于algorithm - 对非常小的列表进行排序的快速算法实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2748749/

相关文章:

algorithm - 如何证明这个贪心算法的最优性?

javascript - 如何比较两段相似代码的性能?

c++ - 传递类的私有(private)方法作为 std::sort 的比较运算符

algorithm - 具有多个分支的等待队列

java - 如何通过减去 2 个 nanoTime 对象获得有意义的结果?

Python Sorted() 跳过具有空列的行

javascript - 边缘动画程序的简单碰撞检测

php - 如何检测当前日期是否大于日期时间?

php - Node.js 或 PHP 中的模式识别算法?

linux - “dotted” linestyle 的性能比 “dashed” linestyle 慢很多是正常的吗?