基数排序,对浮点数据进行排序
基数排序是否能够对浮点数据进行排序,例如 0.5、0.9、1.02 等?
Is radix sort capable of sorting float data for example 0.5, 0.9, 1.02, etc.?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
基数排序是否能够对浮点数据进行排序,例如 0.5、0.9、1.02 等?
Is radix sort capable of sorting float data for example 0.5, 0.9, 1.02, etc.?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(2)
是的,这是可能的。它需要额外的传递才能正确处理负值。 Pierre Terdiman 和 Michael Herf 详细讨论了如何实现它。简而言之,您将浮点数转换为无符号整数,对它们进行排序,然后将它们转换回浮点数(这是必需的,否则负值将错误地排序在正值之后)。
他们的方法的优点是您不会在数据中引入任何错误(前提是您的处理器根据 IEEE 754 标准存储浮点数)。
Yes, it is possible. It requires an additional pass to correctly handle negative values. The articles by Pierre Terdiman and Michael Herf discuss in detail how to implement it. In short, you convert the float to unsigned integer, sort them, and then convert them back to float (this is required, otherwise the negatives values would be incorrectly sorted after the positive ones).
Their method has the advantage that you do not introduce any error into your data (provided that your processor stores the float in accordance to the IEEE 754 standard).
不是开箱即用的,但您有一些选择。您可以离散化数据,例如,通过乘以 100 并四舍五入(这样,对于上面的示例,您将得到 5、9 和 102)。您还可以对数据进行分桶(按范围对数字进行分组,如 0 < x <= 1、1 < x <= 2),然后在每个桶内进行排序。
Not out-of-the-box, but you have some options. You can discretize the data, e.g., by multiplying by 100 and rounding (so that you would have, for your example above, 5, 9, and 102). You could also bucketize the data (grouping numbers by ranges, as in 0 < x <= 1, 1 < x <= 2), and then sort within each bucket.