社会不適合破壊的お味噌マン

くまのプーさんのような大人になりたいです!

バブルソート

バブルソートは一応理解しているつもりなので、さくっといきたいと思います。

Pseudocode

1.フラグ変数を用意する、値はfalseが未完了という意味に取りやすいので、falseでいきます。

2.ソートするためのループを用意します。(補足:何度もループさせたいので、whileかuntilを使いますが、フラグ変数がfalseなのでuntilを使います。)

3.さらに実際に配列を並び変えるためのループ(繰り返し処理)を用意します。(補足:すでにループの中に入っているので配列の長さ分だけ繰り返して、抜けてくれれば良いです。)

4.配列の[i]と[i+1]を比べる条件を書きます。[i]が[i+1]より大きければ5の処理を行います。

5.ここでは各配列のインデックスを指定して、入れ替えます。具体的には[i] には [i + 1]、[i + 1]には[i]を入れて交換を行います。

6.このままでは一回で抜けてしまうので、一番元のuntilループに完了の印としてフラグ変数にtrueを入れます。5のif分には未完了のfalseを入れます。

7.最後にuntilループを抜けた後配列を返します。

def bubble_sort(arr)

  sorted = false #ここで

  until sorted

    sorted = true

    (arr.length - 1).times do |i|
      
      if arr[i] > arr[i+1] 
        arr[i+1], arr[i] = arr[i], arr[i+1]
        sorted = false
      end

    end
  end
  return arr 
end

コードを上からの流れで見ていくと、 f:id:keioka0828:20150314121718j:plain ということです。