class MergeSort def self.merge_sort(list) return list if list.length <= 1 mid = list.length / 2 left = merge_sort(list[0...mid]) # a...b is from a to b exluding b right = merge_sort(list[mid..-1]) merge(left, right) end def self.merge(left, right) arr = [] i = j = 0 while i < left.length and j < right.length do if left[i] <= right[j] arr << left[i] # no need for a counter for arr, because Array#<< or Array#push will simply append the object i += 1 else arr << right[j] j += 1 end end arr.concat left[i..-1] # no need to check for i < left.length, because left[i..-1] will simply be empty in this case arr.concat right[j..-1] arr end end list = [7,6,5,4,3,2,1] p MergeSort.merge_sort(list)