我尝试生成一些ASCII字符串向量,并使用sort
和sort(..., 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
是更典型的排序方法吗?
答案 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}在a
或B
之前。另外,这两种方法在符号之前放置符号,但似乎使用符号的反向排序。
我不能说为什么然而,或者如何将其关闭。