我知道如何使用基数排序对整数进行排序。
但如何使用它来对字符串进行排序呢?或者浮点数?
如果您忽略浮点数的一些特性,例如无穷大、非数字值和零的两种不同表示形式,则可以使用基数排序或任何其他分布排序对浮点数进行排序。IEEE 754-2008 http://en.wikipedia.org/wiki/IEEE_754-2008浮点数具有二进制表示形式,在排序顺序上与整数兼容。所以,如果你排除非数字并重新解释float
or double
as int32
or int64
,您可以直接对它们应用任何分布排序。Edit:负浮点数需要特殊处理(正如 AShelly 所指出的),因为它们的排序顺序与整数的排序顺序相反。
对于字符串,由于其长度可变,因此更加困难。可以使用其他类型的分布排序(桶排序),并且通常用于字符串。字符串的几个起始字符用于桶索引,然后使用任何比较排序对桶内的字符串进行排序。
如果所有字符串的长度几乎相等和/或使用某种技术来放大字符串之间的差异(如第 6 章所述)“FAST:现代 CPU 和 GPU 上的快速架构敏感树搜索” http://wiki.epfl.ch/edicpublic/documents/Candidacy%20exam/kim.pdf),那么也可以使用基数排序:将字符串拆分为长度相等的字符组(或者更好的是位组),将这些组重新解释为整数,然后像对整数进行基数排序一样继续。
Edit:保证所有类型的分布排序仅适用于 ASCII 字符串。其他字符串编码可能需要不同的排序顺序,或者可能取决于区域设置的“collate”参数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)