Skip to content

Instantly share code, notes, and snippets.

@RobertCam
Created September 30, 2015 06:46
Show Gist options
  • Save RobertCam/123fa9d25416df233cc7 to your computer and use it in GitHub Desktop.
Save RobertCam/123fa9d25416df233cc7 to your computer and use it in GitHub Desktop.
sort assignment using merge sort
def merge_sort(arr)
def merge(left_side, right_side)
result = []
left = 0
right = 0
loop do
break if right >= right_side.length && left >= left_side.length
if right >= right_side.length || (left < left_side.length && left_side[left] < right_side[right])
result << left_side[left]
left += 1
else
result << right_side[right]
right += 1
end
end
return result
end
def merge_arr(arr_half)
return arr_half if arr_half.length <= 1
mid = arr_half.length/2 - 1
left_side = merge_arr(arr_half[0..mid])
right_side = merge_arr(arr_half[mid+1..-1])
return merge(left_side, right_side)
end
merge_arr(arr)
end
# Find the maximum
def maximum(arr)
merge_sort(arr).last
end
def minimum(arr)
merge_sort(arr).first
end
# expect it to return 42 below
result = maximum([2, 42, 22, 02])
puts "max of 2, 42, 22, 02 is: #{result}"
# expect it to return 2 below
result = minimum([2, 42, 22, 02])
puts "min of 2, 42, 22, 02 is: #{result}"
# expect it to return nil when empty array is passed in
result = maximum([])
puts "max on empty set is: #{result.inspect}"
result = minimum([])
puts "min on empty set is: #{result.inspect}"
result = maximum([-23, 0, -3])
puts "max of -23, 0, -3 is: #{result}"
result = maximum([6])
puts "max of just 6 is: #{result}"
require 'benchmark'
puts Benchmark.measure {merge_sort [2, 42, 22, 02]}
puts Benchmark.measure {[2, 42, 22, 02].sort}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment