ボゴソートについてはWikipediaの説明がわかりやすい。
コード
ランダムの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