simanのブログ

ゆるふわプログラマー。競技プログラミングやってます。Ruby好き

Rubyでボゴソート

なんとなくボゴソートを書いてみました。

ボゴソート

ボゴソートは配列の要素がソートされるまで、配列の要素のシャッフルを繰り返すアルゴリズムです。計算量がかなり膨大。( O(n*n!) )

def sort_checker(array)
  for i in 0..(array.size-2)
    return false if array[i] > array[i+1]
  end 
  return true
end

(2).upto(10) do |num|
  start_t = Time.now

  array = (1..num).to_a.shuffle

  until sort_checker(array)
    array.shuffle!
  end 

  end_t = Time.now 

  puts "Array size #{num} : #{end_t - start_t}sec"
end
Array size 2 : 1.4e-05sec
Array size 3 : 6.0e-06sec
Array size 4 : 3.0e-06sec
Array size 5 : 7.1e-05sec
Array size 6 : 0.000623sec
Array size 7 : 0.0009sec
Array size 8 : 0.012798sec
Array size 9 : 0.254477sec
Array size 10 : 0.466737sec

10要素までならなんとか1秒以内で終わりますが、それ以降の要素数では終わる気配がありませんでした。