|
|
1
18
更新: 我对这个主题很感兴趣,所以坐下来实现了它(使用 this very fast and memory conservative implementation )我也读 this one (谢谢) celion )发现你甚至不必把浮点数分成尾数和指数来排序。你只需要把这些位一对一地进行整型排序。你只需要关心负数,在算法结束时,负数必须反放在正数前面(我在算法的最后一次迭代中做了一个步骤,以节省一些CPU时间)。 这是我的浮动半径:
它比int基数排序稍微慢一点,因为在函数的开始和结束处都有数组复制,其中浮点按位复制到int并返回。不过,整个函数又是o(n)。在任何情况下都要比你提议的连续排序3次快得多。我再也看不到优化的空间了,但如果有人这样做了:请随时告诉我。 要按降序排序,请在最末尾更改此行:
对此:
测量:
我设置了一些简短的测试,包含所有特殊情况下的浮点(nan,+/-inf,min/max value,0)和随机数。它的排序与linq或
所以我做了一个有1000万个数字的测试:
并停止了不同排序算法的时间:
结果是( 更新:现在使用发布版本运行,而不是调试 ):
大约是Linq的四倍多。这还不错。但还没有那么快
即使这次我的radixsort比linq快,但是 方式 比数组排序慢。:) 更新2:
我做了更多的测量,发现了一些有趣的事情:更长的组长度常数意味着更少的迭代和更多的内存使用。如果使用16位的组长度(仅2次迭代),那么在对小数组进行排序时会有很大的内存开销,但是可以超过
comparison chart http://daubmeier.de/philip/stackoverflow/radixsort_vs_arraysort.png |
|
|
2
1
这里有一个关于如何对浮点执行基数排序的很好的解释: http://www.codercorner.com/RadixSortRevisited.htm 如果所有值都是正值,则可以使用二进制表示;该链接说明如何处理负值。 |
|
|
3
1
你可以用
|
|
4
1
通过做一些有趣的转换和交换数组而不是复制这个版本,对于10万个数字来说,比philip daubmeiers原来的grouplength设置为8快了2倍。它比数组快3倍。按数组大小排序。
|
|
5
0
我想你最好的办法是如果数值不是太接近,并且有一个合理的精度要求,你可以只使用小数点前后的实际浮点数来进行排序。 例如,您可以只使用前4位小数(不管它们是否为0)进行排序。 |
|
|
Rewind · 同时搜索最大值/最小值的操作顺序 1 年前 |
|
|
badbee · 使用xsl:sort时保留未排序元素的问题 1 年前 |
|
|
josepmaria · Pandas顺序列,按对列出 1 年前 |
|
|
BTBts · Python3文件名的字母数字排序[重复] 1 年前 |
|
|
Paul-ET · 对树状图应用程序发送的第一列进行排序失败 2 年前 |
|
VonDerHase · 从列表中删除特定值,Python 2 年前 |
|
|
Nico44044 · JS对数组进行排序,数组末尾为null和空值 2 年前 |