对字符串的选择排序

时间:2012-05-11 12:17:40

标签: sorting selection

选择排序如何与字符串一起使用?我做了一些搜索,似乎无法找到明确的答案。如果我有4个名字[Rob,Adam,Tom,Thomas] - 如何选择排序,排序这些?它只是简单地按第一个字母排序吗?如果是这样,它会如下所示:[Adam,Rob,Thomas,Tom]。

感谢。

1 个答案:

答案 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"]