Rubyでノーム・ソート

def gnome_sort(array, i=1)
  if i < array.size
    if array[i - 1] >= array[i]
      array[i - 1], array[i] = array[i], array[i - 1]
      i = i > 1 ? i - 1 : i + 1
    else
      i = i + 1
    end
    gnome_sort(array, i)
  else
    array
  end
end

returnを使うともうちょっとさっぱりするのかもしれないけど、Rubyでreturn書くようなコードは書きたくないので。