選択ソートは文字列とどのように機能しますか?私はいくつかの検索をしており、決定的な答えを見つけることができないようです。もし私が4つの名前を持っていたら[ロブ、アダム、トム、トーマス] - どのようにソートするのですか?それはちょうど最初の手紙を並べ替えるだろうか?もしそうなら、それは次のように分類されます:[アダム、ロブ、トーマス、トム]。文字列の選択ソート
ありがとうございました。
選択ソートは文字列とどのように機能しますか?私はいくつかの検索をしており、決定的な答えを見つけることができないようです。もし私が4つの名前を持っていたら[ロブ、アダム、トム、トーマス] - どのようにソートするのですか?それはちょうど最初の手紙を並べ替えるだろうか?もしそうなら、それは次のように分類されます:[アダム、ロブ、トーマス、トム]。文字列の選択ソート
ありがとうございました。
すべてのソートアルゴリズムでは、ある種の比較関数を使用して要素の順序を決定します。これは一般に、選択した特定のソートアルゴリズムには無関係です。
ほとんどの言語は、ソートされたデータの種類に応じて、比較関数を推測しようとします。例えば、数字の比較は、単純にどの数字が大きいかをチェックします。文字列の比較関数は、連続する文字を比較する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"]
パーフェクト、ありがとう! –