0

选择排序如何处理字符串?我做了一些搜索,似乎无法找到明确的答案。如果我有 4 个名字 [Rob、Adam、Tom、Thomas] - 选择排序如何对这些进行排序?它会简单地按第一个字母排序吗?如果是这样,它会像下面这样排序吗:[Adam, Rob, Thomas, Tom]。

谢谢。

4

1 回答 1

0

所有排序算法都使用某种比较函数来确定元素的顺序。它通常独立于您选择的特定排序算法。

大多数语言尝试猜测比较函数,具体取决于排序数据的类型。例如,数字比较只是检查哪个数字更大。字符串上的比较函数使用字典顺序来比较连续的字母。一些示例(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"]    
    
于 2012-05-11T13:31:16.813 回答