挿入ソート

Rubyアルゴリズムの勉強してます。 元ネタはプログラミングコンテスト攻略のためのアルゴリズムとデータ構造です。

挿入ソート

# 画面に配列の状態を出力する
def trace(ary)
    puts ary.join(", ")
end

# 配列を受取、挿入ソートする
def insertionSort(ary)
    n = ary.size - 1
    (1..n).each do |i|
        v = ary[i]
        j = i - 1
        while (j >= 0 and ary[j] > v) do
            ary[j + 1] = ary[j]
            j -= 1
        end
        ary[j + 1] = v
        trace ary
    end
    ary
end

ary = gets.split(" ").map(&:to_i) # 標準入力からスペース区切りで配列を受け取る
trace ary # 初期値表示
insertionSort ary

選択ソート

選択ソート

Rubyアルゴリズムの勉強してます。 元ネタはプログラミングコンテスト攻略のためのアルゴリズムとデータ構造です。

# 画面に配列の状態を出力する
def trace(ary)
    puts ary.join(", ")
end
# 配列を受取、挿入ソートする
def selectionSort(ary)
    n = ary.size
    (0..(n - 2)).each do |i|
        minj = i
        (i..(n - 1)).each do |j|
            minj = j if ary[j] < ary[minj]
        end
        t = ary[i]
        ary[i] = ary[minj]
        ary[minj] = t

        trace ary
    end
    ary
end

ary = gets.split(" ").map(&:to_i)
trace ary
selectionSort ary

バブルソート

Rubyアルゴリズムの勉強してます。 元ネタはプログラミングコンテスト攻略のためのアルゴリズムとデータ構造です

バブルソート

# 配列の状態を画面に出力
def trace(ary)
    puts ary.join(", ")
end

# バブルソートを行う 
def bubbleSort(ary)
    n = ary.size
    flag = true
    i = 0
    while flag do
        flag = false
        j = n - 1
        while j >= i + 1 do
            if ary[j] < ary[j - 1]
                tmp = ary[j]
                ary[j] = ary[j - 1]
                ary[j - 1] = tmp
                flag = true
            end
            j -= 1
        end
        trace ary
        i += 1
    end
    ary
end

ary = gets.split(" ").map(&:to_i)
trace ary
bubbleSort ary