summaryrefslogtreecommitdiff
path: root/lib/sorting/merge_sort.rb
blob: de81048ca9199a672f528c9c531fc7cb8d1fda64 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class MergeSort
  def sort(items)
    return items if items.size <= 1
    pivot = items.size/2
    left, right = items[0...pivot], items[pivot...items.size]
    merge(sort(left), sort(right))
  end

  private

  def merge(left, right)
    result = []
    result << ((left.first <=> right.first) == -1 ? left.shift : right.shift) until left.empty? || right.empty?
    result + left + right
  end
end