Algorithm 如何使用分布排序(基数排序等)对字符串进行排序?

Algorithm 如何使用分布排序(基数排序等)对字符串进行排序?,algorithm,sorting,radix-sort,Algorithm,Sorting,Radix Sort,我知道如何使用基数排序来排序整数 但是如何使用它来排序字符串呢?或浮点数?如果忽略浮点数的某些特性,如无穷大、非数字值和两种不同的零表示,则可以使用基数排序或任何其他分布排序对浮点数进行排序。浮点数具有二进制表示,在排序顺序上与整数兼容。因此,如果排除非a数字并将float或double重新解释为int32或int64,则可以直接对它们应用任何分布排序编辑:负浮点数需要特殊处理(正如AShelly所指出的),因为它们的排序顺序与整数的排序顺序相反 对于字符串,由于其长度可变,因此更为困难。可以使

我知道如何使用基数排序来排序整数


但是如何使用它来排序字符串呢?或浮点数?

如果忽略浮点数的某些特性,如无穷大、非数字值和两种不同的零表示,则可以使用基数排序或任何其他分布排序对浮点数进行排序。浮点数具有二进制表示,在排序顺序上与整数兼容。因此,如果排除非a数字并将
float
double
重新解释为
int32
int64
,则可以直接对它们应用任何分布排序编辑:负浮点数需要特殊处理(正如AShelly所指出的),因为它们的排序顺序与整数的排序顺序相反

对于字符串,由于其长度可变,因此更为困难。可以使用其他类型的分布排序(桶排序),并且通常用于字符串。字符串的几个起始字符用于桶索引,然后使用任何比较排序对桶内的字符串进行排序

如果所有字符串的长度几乎相等,并且/或者使用某种技术来放大字符串之间的差异(如的第6章所述),则也可以使用基数排序:将字符串拆分为长度相等的字符组(或者更好的是,拆分为位组),将这些组重新解释为整数,并继续,就像它是整数的基数排序一样

编辑:所有类型的分发排序都保证仅对ASCII字符串正常工作。其他字符串编码可能需要不同的排序顺序,或者可能取决于区域设置的“collate”参数。

是的,这是可能的

请参阅浮动。它使用了这样一个事实:浮点类型转换为整数类型的比较是正确的(一旦更正了负数)。有关详细信息,请参阅


对于字符串,可以通过执行MSD基数排序并确保遇到空值时停止降序来解决可变长度问题。请参阅。

@NiklasB.:基数排序是一种非比较排序。@Groo:Oh。在这种情况下,我的评论无关紧要:)