バブルソート

class Array
  def bubble_sort
    a = self.dup
    for i in 0..(a.size - 2)
      (a.size - 1).downto(i + 1) do |j|
        a[j], a[j - 1] = a[j - 1], a[j] if a[j] < a[j - 1]
      end
    end
    a
  end
end

p [6, 0, 5, 2, 3].bubble_sort    #=>[0, 2, 3, 5, 6]



アルゴリズムイントロダクション 第3版 第1巻: 基礎・ソート・データ構造・数学 (世界標準MIT教科書)』p.33-34