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]