単純な整列アルゴリズム
バブルソート
- O(n^2)
- 安定
# 配列の後ろから先頭に向かってスキャンしていき、 # もし隣り合う2つの要素の大小関係が逆だったら、それを入れ換える def bubble_sort( arr ) (arr.length-1).times do |i| j = arr.length-1 while i<j arr[j],arr[j-1] = arr[j-1],arr[j] if arr[j]<arr[j-1] j -= 1 end end end
選択ソート
- O(n^2)
- 不安定
# 整列されていない部分から最小の要素を選び出して、 # それを先頭へ持っていく def selection_sort( arr ) (arr.length-1).times do |i| lowest = i j = arr.length-1 while i<j lowest = j if arr[j]<arr[lowest] end arr[i],arr[lowest] = arr[lowest],arr[i] end end
挿入ソート
- O(n^2)
- 安定
# 配列のうち一部分を整列済みの状態にしておき、 # 残りの要素をひとつずつその中の適切な位置に挿入していく def insersion_sort( arr ) for i in 1..(arr.length-1) j = i while 1<=j arr[j],arr[j-1] = arr[j-1],arr[j] if arr[j]<arr[j-1] j -= 1 end end end
速度(右が早い)
バブルソート < 選択ソート < 挿入ソート
参考文献
定本 Cプログラマのためのアルゴリズムとデータ構造 (SOFTBANK BOOKS)
- 作者: 近藤嘉雪
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 1998/03
- メディア: 単行本
- 購入: 11人 クリック: 169回
- この商品を含むブログ (77件) を見る