选择排序如何与字符串一起使用?我做了一些搜索,似乎无法找到明确的答案。如果我有4个名字[Rob,Adam,Tom,Thomas] - 如何选择排序,排序这些?它只是简单地按第一个字母排序吗?如果是这样,它会如下所示:[Adam,Rob,Thomas,Tom]。
感谢。
答案 0 :(得分:0)
所有排序算法都使用某种比较函数来确定元素的顺序。它通常独立于您选择的特定排序算法。
大多数语言都会尝试猜测比较函数,具体取决于排序数据的类型。例如,数字比较只是检查哪个数字更大。字符串上的比较函数使用比较连续字母的dictionary order。一些例子(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"]