マージソート

#!/usr/bin/env ruby
 
def marge_sort(data, min, max)
  if min >= max
    return
  end
  mid = (max + min) / 2
  marge_sort(data, min, mid)
  marge_sort(data, mid + 1, max)
  i = k = min
  j = mid + 1
  tmp = []
  while i <= mid && j <= max
    if data[i] < data[j]
      tmp[k] = data[i]
      k += 1
      i += 1
    else
      tmp[k] = data[j]
      k += 1
      j += 1
    end
  end
  while i <= mid
    tmp[k] = data[i]
    k += 1
    i += 1
  end
  while j <= max
    tmp[k] = data[j]
    k += 1
    j += 1
  end
  for i in min..max
    data[i] = tmp[i]
  end
end
 
p data = [32, 3244, 832232, 322, 3, 32, 33322]
marge_sort(data, 0, data.size - 1)
p data