def merge_sort(array)
  return array if array.length <= 1

  mid = array.length / 2
  first_array = array.slice(0..mid - 1)
  second_array = array.slice(mid..-1)

  first_array = merge_sort first_array
  second_array = merge_sort second_array

  # merge
  result = []
  until first_array.empty? && second_array.empty?
    if first_array.empty?
      result.concat(second_array)
      second_array.clear
    elsif second_array.empty?
      result.concat(first_array)
      first_array.clear
    else
      result << if first_array.first < second_array.first
                  first_array.shift
                else
                  second_array.shift
                end
    end
  end
  result
end

if $0 == __FILE__
  puts 'Enter a list of numbers separated by space'

  list = gets.split.map(&:to_i)
  p merge_sort(list)
end