何かやってみるブログ

興味をもったこと、趣味のこと、技術について色々書きます。

[Ruby メモ] ボゴソートを実装してみた。

ボゴソートについてはWikipediaの説明がわかりやすい。

ja.wikipedia.org

コード

ランダムの10個の要素を持つ配列を作成してボゴソートをする。Benchmarkを使って実行時間も出力させてみた。

require 'benchmark'

def check_sorted?(arr)
  arr[..-2].each_with_index do |elm, index|
    return false if elm > arr[index + 1]
  end
  true
end

def bogo_sort(arr)
  loop do
    if check_sorted?(arr)
      return arr
    else
      arr = arr.shuffle
    end
  end
end

result = Benchmark.realtime do
  target_array = Array.new(10) { rand(1000) }
  p bogo_sort(target_array)
end

puts "Result: #{result} seconds"

実行結果

☁  ~  ruby sample.rb
[10, 33, 418, 615, 708, 718, 774, 783, 884, 980]
Result: 6.230043000075966 seconds
☁  ~  ruby sample.rb
[135, 154, 171, 197, 341, 394, 625, 714, 903, 960]
Result: 11.033232000190765 seconds
☁  ~  ruby sample.rb
[38, 193, 239, 258, 337, 483, 502, 607, 798, 948]
Result: 0.92130700009875 seconds
☁  ~  ruby sample.rb
[55, 169, 364, 613, 622, 689, 720, 780, 806, 822]
Result: 0.04460099991410971 seconds
☁  ~  ruby sample.rb
[45, 47, 152, 266, 308, 505, 728, 742, 815, 960]
Result: 4.588109000120312 seconds