class Array

Public Instance Methods

butterfly_sort_by(&criteria) click to toggle source

Let a is {Array}. Let as is a.{#sort_by}(&criteria). Then as.{#butterfly_sort_by}(&criteria) = [as[n], as[0], as[n-1], as[1], as[n-2], as[2], as[n-3], as[3], …].

@yieldparam [Object] item @yieldreturn [Comparable] @return [Array]

# File lib/array/butterfly_sort_by.rb, line 12
def butterfly_sort_by(&criteria)
  a = sort_by(&criteria)
  r = Array.new(a.size)
  (0...(a.size >> 1)).each do |i|
    r[i*2] = a[-i-1]
    r[i*2+1] = a[i]
  end
  if a.size.odd? then
    r[-1] = a[a.size >> 1]
  end
  return r
end