

Ruby言語の質問になります。  
ソースは以下になります。

[code]

    x = ["abc","dejgk","loqp"]
    p x.sort{|a,b|a<=>b} #①処理
    p x.sort{|a,b|b<=>a} #②処理
    # ["abc", "dejgk", "loqp"]
    # ["loqp", "dejgk", "abc"]
    
[/code]

<=>演算子の評価によって、sortメソッドはどのように処理をするのでしょうか。  
私が考えている処理は以下になるのですが、実行結果と一致せず、  
正しい処理が分かりません。

①処理について  
"abc"<=>"deigk" 評価 -1 "abc"を配列[0]に格納。"deigk"を配列[1]に格納  
"deigk"<=>"loqp" 評価 -1 "deigk"を配列[1]に格納。"loqp"を配列[2]に格納。  
# ["abc", "dejgk", "loqp"]

②処理について  
"deigk"<=>"abc" 評価 1 "abc" を配列[1]に格納。"deigk"を配列[0]に格納。  
"loqp"<=>"abc" 評価 1 "abc"を配列[2]に格納。"loqp"を配列[1]に格納。  
#["deigk", "loqp", "abc"]

質問初投稿のため至らない点があるかもしれませんがお願いいたします。

以上です。  
よろしくお願いします。


CC BY-SA 3.0
2015-10-24T02:25:04.203
18008
2015-10-24T03:13:32.643
2015-10-24T02:30:30.357
12912
12912
question
ruby
sortメソッドの処理が分かりません


`Array#sort` は配列の要素をブロックで指定された評価規則にしたがって並べ替えるものです。  
必ずしも配列の先頭から順番に比較が行われるわけではありません。今回の例では、手元で試したところ次のような順で比較が行われていました。

① `"dejgk"<=>"loqp"`, `"abc"<=>"dejgk"`  
② `"dejgk"<=>"loqp"`, `"abc"<=>"loqp"`, `"abc"<=>"dejgk"`

利用者は普通は sort メソッドの内部の並び替えのアルゴリズムについて知る必要はないです。  
`Array#sort` で用いられているソートのアルゴリズムはクイックソートと呼ばれるものだと思います。


CC BY-SA 3.0
2015-10-24T03:13:32.643
18011
2015-10-24T03:13:32.643
3249
18008
answer