質問: ["abc","dejgk","loqp"] p x.sort{|a,b|a<=>b} #1処理 p x.sort{|a,b|b<=>a} #2処理 # ["abc", "dejgk", "loqp"] # ["loqp", "dejgk", "abc"] ``` <=>演算子の評価によって、sortメソッドはどのように処理をするのでしょうか。 私が考えている処理は以下になるのですが、実行結果と一致せず、 正しい処理が分かりません。 1処理について "abc"<=>"deigk" 評価 -1 "abc"を配列[0]に格納。"deigk"を配列[1]に格納 "deigk"<=>"loqp" 評価 -1 "deigk"を配列[1]に格納。"loqp"を配列[2]に格納。 # ["abc", "dejgk", "loqp"] 2処理について "deigk"<=>"abc" 評価 1 "abc" を配列[1]に格納。"deigk"を配列[0]に格納。 "loqp"<=>"abc" 評価 1 "abc"を配列[2]に格納。"loqp"を配列[1]に格納。 #["deigk", "loqp", "abc"] 質問初投稿のため至らない点があるかもしれませんがお願いいたします。 以上です。 よろしくお願いします。
回答: `Array#sort` は配列の要素をブロックで指定された評価規則にしたがって並べ替えるものです。 必ずしも配列の先頭から順番に比較が行われるわけではありません。今回の例では、手元で試したところ次のような順で比較が行われていました。 1 `"dejgk"<=>"loqp"`, `"abc"<=>"dejgk"` 2 `"dejgk"<=>"loqp"`, `"abc"<=>"loqp"`, `"abc"<=>"dejgk"` 利用者は普通は sort メソッドの内部の並び替えのアルゴリズムについて知る必要はないです。 `Array#sort` で用いられているソートのアルゴリズムはクイックソートと呼ばれるものだと思います。