2012-05-11 16 views
0

選択ソートは文字列とどのように機能しますか?私はいくつかの検索をしており、決定的な答えを見つけることができないようです。もし私が4つの名前を持っていたら[ロブ、アダム、トム、トーマス] - どのようにソートするのですか?それはちょうど最初の手紙を並べ替えるだろうか?もしそうなら、それは次のように分類されます:[アダム、ロブ、トーマス、トム]。文字列の選択ソート

ありがとうございました。

答えて

0

すべてのソートアルゴリズムでは、ある種の比較関数を使用して要素の順序を決定します。これは一般に、選択した特定のソートアルゴリズムには無関係です。

ほとんどの言語は、ソートされたデータの種類に応じて、比較関数を推測しようとします。例えば、数字の比較は、単純にどの数字が大きいかをチェックします。文字列の比較関数は、連続する文字を比較するdictionary orderを使用します。いくつかの例(GT - LT、より大きい - 未満):

  • は数字の比較:

    > compare 1 2 
    LT 
    
  • 手紙:

    > compare 'R' 'A' 
    GT 
    
  • 文字列を(それが内部的に文字を比較し、考えます方法):

    > compare "Rob" "Adam" 
    GT 
    

ソート関数はこの比較を内部的に使用します([1,2,3]は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"]  
    
+0

パーフェクト、ありがとう! –