Rubyでヒープソートを作ってみた
なんか、研究室内でヒープソートを作ってみよう
みたいな流れになったので、勢いだけでトライ
ほっとんどわからんRubyでやってみた
実際に作ってみたのがこちら
全く参考にはならんかとw
def heap_sort(a) sorted = Array.new() a.length.times do a = create_heap(a, 0) sorted.push(a[0]) a = a.slice(1..-1) end return sorted end def create_heap(a, num) l = 2 * num + 1 r = l + 1 if(a[l] == nil && a[r] == nil) return a end if (a[l] != nil && a[r] != nil) a = create_heap(a, l) a = create_heap(a, r) if (a[l] < a[r]) cm = l else cm = r end if (a[cm] < a[num]) a[cm], a[num] = a[num], a[cm] end elsif (a[l] != nil && a[r] == nil) if (a[l] < a[num]) a[l], a[num] = a[num], a[l] end end return a end ary = Array.new([9, 3, 5, 2, 10, 8, 1, 4, 6, 7]) p ary p heap_sort(ary)
実行結果はこちら
$ ruby heap.rb [9, 3, 5, 2, 10, 8, 1, 4, 6, 7] [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
久々にプログラミングしたのと、Rubyがよくわからんのでぐちゃぐちゃw
色々アドバイスをもらったりして、なんとか完成
配列は1つで済ませた方がよかったかな〜とか思ったりするけど、まぁいいか
しかし、やっぱりあんまりプログラミングが得意じゃないなぁ…
別に嫌いなわけやないねんけど、普段やらんから仕方ないか
ちょくちょくやっていけたらいいな〜と思いつつ、いつもできてないのが悪いなw