Skip to content

Instantly share code, notes, and snippets.

@denis-mironov
Last active June 13, 2020 11:35
Show Gist options
  • Save denis-mironov/8c03e9946d05a77724852324d0487724 to your computer and use it in GitHub Desktop.
Save denis-mironov/8c03e9946d05a77724852324d0487724 to your computer and use it in GitHub Desktop.
Merge sort algorithm implementation in Ruby

Visualisation: https://www.toptal.com/developers/sorting-algorithms

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

  mid = l/2
  left  = array[0...mid]
  right = array[mid...l]
  merge(merge_sort(left), merge_sort(right))
end

def merge(left, right)
  sorted = []

  until left.empty? || right.empty?
    if left[0] <= right[0]
      sorted << left.shift
    else
      sorted << right.shift
    end
  end
  sorted + left + right
end

puts 'Please, enter array size'
arr_size = gets.chomp.to_i
array = Array.new(arr_size) { rand(10..100) }
n = array.length

if n <= 1
  print "#{array}\n"
  return
end

print "#{array}\n"
puts '-' * 50

sorted = merge_sort(array)
print "#{sorted}\n"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment