如何使用排序分配(基数排序,等等)进行排序串?
-
10-12-2019 - |
题
我知道如何使用基数排序排序整数。
但是,如何用它来进行排序串?或浮动数字?
解决方案
基数进行排序或任何其他分配的排序可能被用来排序浮点的数字,如果你忽略了一些特殊性,他们像无限,不是一个数值和两个不同的表示为零。 IEEE754-2008 浮点数二的表述,在兼容的排列顺序与整数的数字。因此,如果排除不是一个数字,并重新解释 float
或 double
作为 int32
或 int64
, 你可以直接适用的任何排序分配给他们。 编辑: 负浮点数需要特殊处理的(如指出的那样AShelly),因为他们的排序相反的排列顺序整数的数字。
与串,也是较为困难,因为他们变量的长度。其他种类的分类(桶种)可以使用并经常使用的字符串。几个起始字符串中使用对桶索引,那么任何对比的排序被用于种串的内部桶。
如果所有串有几乎相等的长度和/或某些技术被用于扩大的差异之间的串(如说明第6章 "快速:快建筑敏感的树上搜索现代的Cpu和Gpu"),则基数的排序可用,以及:分裂串的字符组(或更好,比特组)等的长度,重新诠释这些群体作为整数,并继续为,如果它是基排序,对于整数。
编辑: 所有种类的分布进行排序,保证正常工作只为ASCII strings.其他串的编码可能需要不同的排列顺序,或可能取决于"核对"参数的区域。
其他提示
是的,它是可能的。
见 Radix排序,对浮动数据进行排序 for floats。它使用了浮动对整数类型的浮点正确比较(一旦纠正了否定)。查看本文详细信息
对于字符串,您可以通过执行MSD Radix排序和确保在遇到空无效时停止降序来解决可变长度问题。请参阅在C ++中实现字符串。
不隶属于 StackOverflow