い〜さねっと

雑多メモ

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