Class: MergeSort

Inherits:
Object
  • Object
show all
Defined in:
lib/compare-sort.rb

Class Method Summary collapse

Class Method Details

.merge(nums1, nums2) ⇒ Object



203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
# 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) ⇒ Object



183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
# 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