选择排序如何处理字符串?我做了一些搜索,似乎无法找到明确的答案。如果我有 4 个名字 [Rob、Adam、Tom、Thomas] - 选择排序如何对这些进行排序?它会简单地按第一个字母排序吗?如果是这样,它会像下面这样排序吗:[Adam, Rob, Thomas, Tom]。
谢谢。
所有排序算法都使用某种比较函数来确定元素的顺序。它通常独立于您选择的特定排序算法。
大多数语言尝试猜测比较函数,具体取决于排序数据的类型。例如,数字比较只是检查哪个数字更大。字符串上的比较函数使用字典顺序来比较连续的字母。一些示例(GT - 大于,LT - 小于):
比较数字:
> compare 1 2
LT
字母:
> compare 'R' 'A'
GT
字符串(它在内部比较字母,想想如何):
> compare "Rob" "Adam"
GT
排序函数在内部使用此比较([1,2,3] 是三个数字的列表)。您不知道内部使用了哪种排序算法,但只要使用相同的比较函数,结果应该不会有所不同:
> sort [3,1,2]
[1,2,3]
> sort ['t', 'h', 'o', 'm', 'a', 's']
['a', 'h', 'm', 'o', 's', 't']
> sort ["Rob", "Adam", "Tom", "Thomas"]
["Adam","Rob","Thomas","Tom"]
您甚至可以定义自己的比较函数,以按一些更复杂的标准进行排序:
按素数除数对数字列表进行排序。
第一个自定义比较函数:
> numOfPrimeDivs 30
3
> numOfPrimeDivs 6
2
> let compareNumOfPrimeDivs n1 n2 = compare (numOfPrimeDivs n1) (numOfPrimeDivs n2))
> compareNumOfPrimeDivs 30 6
GT
> sortBy compareNumOfPrimeDivs [2,210,30,2310,6]
[2,6,30,210,2310]
按字符串长度排序
比较功能:
> length "Rob"
3
> length "Adam"
4
> let compareLength s1 s2 = compare (length s1) (length s2)
> compareLength "Rob" "Adam"
LT
> sortBy compareLength ["Rob", "Adam", "Tom", "Thomas"]
["Rob","Tom","Adam","Thomas"]