アルゴリズムで頭の体操 2

直感的にわかるソートの方法は?

PHPでプログラムを書いてみよう 「第1回:アルゴリズムからプログラムを学ぼう!(http://www.thinkit.co.jp/article/62/1/2.html)」では、バブルソートの原理を説明しましたが、今回はまずこれをプログラムにしてみましょう。

須藤 克彦

2008年5月9日 20:00

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」という関数を作ってそれを使っています。もちろん、ここに入れ替えるコードを書いても構いませんが、入れ替える対象物によっては、手順が長くなるかもしれません。そのような場合も想定して、独立した機能にします。そのために関数にするわけです。

この記事をシェアしてください

人気記事トップ10

人気記事ランキングをもっと見る