基数排序浮动数据

时间:2011-01-15 18:40:17

标签: floating-point radix

radix如何对浮动数据进行排序?例如12.4,45.13等会首先读取小数点的右侧吗?还是先读取小数点的左侧?然后如果它读取小数点的右侧,它将如何处理数字,它首先读到最右边的那个?

3 个答案:

答案 0 :(得分:2)

请参阅此页面的讨论。

http://codercorner.com/RadixSortRevisited.htm

基本上,计算机以特定格式存储浮点。他们不把它写成45.13。因此,以这种方式思考它与实际工作方式无关。

忽略这一点,Radix排序必须首先考虑最重要的部分。在浮点数中,它是最左边的数字。基本上,我们将所有数字填充到小数点前的相同位数。然后我们会从左到右阅读数字。

答案 1 :(得分:1)

基数排序对数字的二进制表示进行操作,并对对象进行排序,就像它们是一个大的二进制整数一样。

对于实数整数和字符串,二进制表示与我们期望的整理顺序非常相符,因此基数排序是一个有趣的,如果有些不寻常的替代方案。

事实证明,只要浮点数以正确的方向遍历,基数排序就可以正常工作,除非它会向后处理符号位。

在内部二进制表示中,FP值有一个符号位,大约10位指数,然后大约20或50位是“分数”或尾数。

S E E E E E E E E M M M M M M M M M M M M M M M . . .

指数有偏差,因此小值实际上是最负的指数,所以它正确排序,尾数也是如此。

只要所有数字都是正数或负数,或者符号位首先被反转,并且扫描是从左到右,那么我认为基数排序对FP数字起作用。

答案 2 :(得分:0)

基数排序的最佳代码是我知道的两倍:https://bitbucket.org/ais/usort/src/474cc2a19224/usort/f8_sort.c