radixsort如何处理R中的字符串?

时间:2017-12-28 14:52:06

标签: r sorting radix-sort

我尝试生成一些ASCII字符串向量,并使用sortsort(..., method="radix")对它们进行排序;但是排序的矢量是不同的!我尝试阅读radixsort帮助,这些都没有暗示radixsort应该以任何其他方式对字符串向量进行排序。这是基数排序的错误还是“功能”?

请参阅下面的MWE

set.seed(1)
library(data.table)
bs = replicate(10, rawToChar(sample(as.raw(32:126), 2, replace=T)))

bs_sorted = sort(bs)
bs_radixsorted = sort(bs, method="radix")

bs_sorted
# "[%" "30" "3u" "9C" "aD" "d~" "Di" "iO" "Vv" "y^"
bs_radixsorted
# "30" "3u" "9C" "Di" "Vv" "[%" "aD" "d~" "iO" "y^"

我在Windows 10 64位上运行R 3.4.3。

更多信息 MS Excel按照sort对字符串进行排序的方式对其进行排序,或许sort是更典型的排序方法吗?

1 个答案:

答案 0 :(得分:1)

不是一个完整的答案,但问题似乎仅限于排序算法如何处理符号和大写字母。如果你只使用数字,这两种算法一致:

 bs = sample(1:100, 10)

或只是小写字母:

bs = replicate(10, paste(sample(letters, 2, replace = T), collapse = ""))

但如果添加一些符号则不行:

bs = replicate(10, paste(sample(c(letters[1:2], "*", "%"), 1, replace = T), collapse = ""))

或者如果你混合使用大写和小写字母:

bs = replicate(10, paste(sample(c(letters[1:2], toupper(letters[1:2])), 1, replace = T), collapse = ""))

因此,看起来radixsort将所有大写字母放在任何小写字母之前(例如B之前的a),而默认方法排序A和{{1}在aB之前。另外,这两种方法在符号之前放置符号,但似乎使用符号的反向排序。

我不能说为什么然而,或者如何将其关闭。