【问题标题】:Selection sort on strings字符串选择排序
【发布时间】:2012-05-11 21:31:16
【问题描述】:

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

谢谢。

【问题讨论】:

    标签: sorting selection


    【解决方案1】:

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

    大多数语言都尝试猜测比较函数,具体取决于排序数据的类型。例如,数字比较只是检查哪个数字更大。字符串比较函数使用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"]    
      

    【讨论】:

      猜你喜欢
      • 2015-05-03
      • 1970-01-01
      • 2018-04-23
      • 2016-03-26
      • 1970-01-01
      • 2014-06-13
      • 2023-03-03
      • 2011-07-27
      • 2021-03-17
      相关资源
      最近更新 更多