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