Skip to content

Instantly share code, notes, and snippets.

@ruxandrafed
Created September 2, 2015 02:55
Show Gist options
  • Save ruxandrafed/f0eb0423b4e105e20a5e to your computer and use it in GitHub Desktop.
Save ruxandrafed/f0eb0423b4e105e20a5e to your computer and use it in GitHub Desktop.
def merge_sort(arr)
# if array is empty or has just one element, no need to sort
return arr if arr.size <= 1
# split array in 2 halves (divide)
mid = arr.size/2
left = arr[0, mid] # arr[start,length]
right = arr[mid, arr.size-mid]
return merge(merge_sort(left),merge_sort(right))
end
def merge(arr1,arr2)
merged_arr = []
until arr1.empty? || arr2.empty?
if arr1.first < arr2.first
merged_arr << arr1.shift # removes first element of arr1 and also returns it (and pushes it to merged_arr)
else
merged_arr << arr2.shift
end
end
merged_arr.concat(arr1).concat(arr2)
end
puts "What is the array you want to sort? (e.g. 56,2,34,1,4,75)"
array = gets.chomp.split(",").map { |i| i.to_i}
puts "Original array: #{array}"
puts "Sorted array: #{merge_sort(array)}"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment