- Ruby 初心者スレッド Part 57©2ch.net [転載禁止]©2ch.net
93 :デフォルトの名無しさん[]:2015/03/30(月) 12:52:21.90 ID:5htnBXQS - 下のマージソートを真似してやると成功するんだけど、ちょっと理解できない・・・
http://melborne.github.io/2010/10/12/Ruby/ a,bに1つずつ入ったらmergeに行って小さい順にresに入れていく、を繰り返してると思うんですが、 これだと整列された2つが次々resに入ってもres全体では整列されてないように思えます・・・ご教授おねがいします class Array def merge_sort tmp = self.dup return tmp if tmp.length <= 1 a, b = self.half.map { |e| e.merge_sort } merge(a, b) end def half mid = length/2 return slice(0...mid), slice(mid..-1) end def merge(a, b) res = [] until a.empty? && b.empty? res << case when a.empty? then b.shift when b.empty? then a.shift when a.first < b.first then a.shift else b.shift end end res end end
| - Ruby 初心者スレッド Part 57©2ch.net [転載禁止]©2ch.net
95 :デフォルトの名無しさん[sage]:2015/03/30(月) 14:00:25.71 ID:5htnBXQS - 再帰で結果待ちのe.mergesortに整列されたのが帰ってきて
それがa,bに渡されて整列されていくのかな
|
|