バブルソート
Arrayのインスタンスメソッドとしてbubble_sortを実装してみました。範囲の指定は1...self.lengthがいちばんしっくりきました。
class Array def bubble_sort loop { sorted = true for i in 1...self.length if self[i-1] > self[i] self[i-1], self[i] = self[i], self[i-1] sorted = false end end break if sorted } self end end p [ 3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5 ].bubble_sort
追記(2008-07-19)
まつださんからのコメントを元に別バージョンを作りました。unsorted_lengthというのはちょっと誤解を招く変数名ですけれど。
class Array def bubble_sort unsorted_length = self.length loop { sorted = true for i in 1...unsorted_length if self[i-1] > self[i] self[i-1], self[i] = self[i], self[i-1] sorted = false end end break if sorted unsorted_length -= 1 } self end end p [ 3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5 ].bubble_sort