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