I have implemented a merge sort in Ruby. (Yes, I know, there's Array#sort) I would like to get feedback on code quality and optimization.
def merge(a, b)
result = []
while !a.empty? && !b.empty?
if a[0] <= b[0]
result << a.shift
else
result << b.shift
end
end
result += a += b
return result
end
def merge_sort(m)
if m.length <= 1
return m
end
left, right = [], []
m.each_with_index do |x, i|
if i < m.length / 2
left << x
else
right << x
end
end
left = merge_sort(left)
right = merge_sort(right)
return merge(left, right)
end
input = [*1..100].shuffle
p input
p merge_sort input