コームソート

プログラミングの宝箱 アルゴリズムとデータ構造 (C magazine)のコームソートをRubyで。

class Array
  def comb_sort
    gap = self.size
    begin
      if 0 == (gap = gap * 10 / 13)
        gap = 1
      end
      i = 0
      has_sorted = false
      until (i + gap >= self.size) do
        if self.at(i) > self.at(i + gap)
          has_sorted = true
          tmp = self[i]
          self[i] = self[i + gap]
          self[i + gap] = tmp
        end
        i += 1
      end
    end until ( gap < 1 or !has_sorted)
    return self
  end
end

p array = [30,55,5,309,9,114,3,6,34,24,24]
p array.comb_sort