鉴于我有一个数字列表,并且对于每个数字n我知道n是由一些常数位表示的。
即使我的数字是真实数字而不一定是整数,我可以使用基数排序吗?
答案 0 :(得分:0)
你可以通过将它们乘以-1来遍历从浮点右边的所有数字到负数,同样,你隐藏的每个数字都会保持对实数值的引用,否则你需要将更改的数字转换回来原始价值观。如果再次转换,最后一次操作可能花费你O(wn),或者如果保持参考只是O(n),如果W被认为是常数,那么它无关紧要。然后,使用基数排序而不考虑浮点。 效率:O(wn)whe是w的常数,n是提供的数量。 基数排序使用相同的效率。 总效率:O(n)
答案 1 :(得分:0)
假设IEEE格式并忽略NAN等问题,则将浮点数转换为整数或双倍长整数以进行排序并切换最重要的数字"上的符号位。这假设传统的计数/基数排序执行最不重要的数字"第一。 A"数字"大小为8位是常见的。
你也可以在排序之前和之后切换整个阵列上的符号位,这与Ori Rafeal建议乘以-1相同。