選択ソートは文字列でどのように機能しますか?私はいくつかの検索を行いましたが、決定的な答えを見つけることができないようです。私が4つの名前[Rob、Adam、Tom、Thomas]を持っていた場合、選択ソートはどのようにソートされますか?単に最初の文字で並べ替えるだけでしょうか?もしそうなら、それは次のように分類されますか:[アダム、ロブ、トーマス、トム]。
ありがとう。
すべての並べ替えアルゴリズムは、ある種の比較関数を使用して要素の順序を決定します。これは通常、選択した特定の並べ替えアルゴリズムとは無関係です。
ほとんどの言語は、ソートされたデータのタイプに応じて、比較関数を推測しようとします。たとえば、数値の比較では、どちらの数値が大きいかを確認するだけです。文字列の比較機能は、連続する文字を比較する辞書の順序を使用します。いくつかの例(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"]