class MergeSort
Public Class Methods
merge(nums1, nums2)
click to toggle source
# File lib/compare-sort.rb, line 203 def self.merge(nums1, nums2) # this will happen if there are an off number of arrays return nums1 if !nums2 total_length = nums1.length + nums2.length sorted_nums = [] until sorted_nums.length == total_length if nums2.empty? sorted_nums += nums1 elsif nums1.empty? sorted_nums += nums2 elsif nums2[0] < nums1[0] sorted_nums << nums2.shift else sorted_nums << nums1.shift end end return sorted_nums end
run(nums)
click to toggle source
# File lib/compare-sort.rb, line 183 def self.run(nums) return nums if nums == [] #split into single arrays nums.map! {|num| [num]} #run until sorted while nums.length != 1 i = 0 #iterate through the nested array and merge them while i < nums.length merged_nums = self.merge(nums[i], nums[i+1]) nums.delete_at(i+1) nums.delete_at(i) nums.insert(i, merged_nums) i += 1 end end return nums[0] end