Merge Sort ver.1
ARGVでコマンドラインから引数を渡そうと思ったけど、flozenでslice!できませんよとエラーが出てきた。dupしても、なんかおかしなことになる。それが気になる。
def m_sort(array) if array.size == 1 array else array1 = m_sort(array.slice!(0, array.size/2)) array2 = m_sort(array) merge(array1, array2) end end def merge(array1, array2) merged_array = [] (array1.size + array2.size).times do merged_array << array1.shift if !array1.empty? && (array2.empty? || array1.first <= array2.first) merged_array << array2.shift if !array2.empty? && (array1.empty? || array1.first > array2.first) end merged_array end p m_sort([9,32,4,10,3])
実行結果
C:\ruby>ruby m_sort.rb [3, 4, 9, 10, 32]