直感的にわかるソートの方法は?
PHPでプログラムを書いてみよう
「第1回:アルゴリズムからプログラムを学ぼう!(http://www.thinkit.co.jp/article/62/1/2.html)」では、バブルソートの原理を説明しましたが、今回はまずこれをプログラムにしてみましょう。
前回のおさらいですが、バブルソートの考え方は次のようなものです。カードが横一列に並んでいるものとします。
(1)右端から始めて、それとすぐ右隣とを比較する。
具体的には右側が左側よりも小さければ入れ替えます。それ以外のときはそのままにしておきます。視点を1つ左に移します。
(2)(1)を繰り返す。
ではこれをPHPで書いてみます。
プログラムの内容
(1)バブルソートの関数ですが、引数として受け取った配列の中を並べ変えるものとします。
(2)カードの枚数が「$size」に入ります。
(3)ここで、右端から左に向かって比較しますが、どこまで見るかを示す、いわば限界が「$last」です。最初は左端まで見ますが、次はその1つ右側まで、というように比較する範囲を狭めます。そのためのループです(無駄ですが、毎回左端まで見ても構いません)。
(4)比較する右端のインデックスは、見る対象枚数よりも1だけ少ないので「$size-1」が比較対象の最初の位置を示しています。
(5)ここで実際の「比較」を行います。左側が右側より大きければ...
(6)入れ替えを行います。この入れ替えにはわざわざ「swap」という関数を作ってそれを使っています。もちろん、ここに入れ替えるコードを書いても構いませんが、入れ替える対象物によっては、手順が長くなるかもしれません。そのような場合も想定して、独立した機能にします。そのために関数にするわけです。