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

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

著者について

須藤 克彦

神戸情報大学院大学 須藤 克彦

1980年立命館大学理工学部卒、独立系ソフトハウスに入社。CやFORTRANコンパイラなどの言語処理系の設計・開発に約10年間従事。その後ユーザ系企業でUNIXによるクライアントサーバシステムの設計・開発を主導。同時に企業の内外で人材育成に注力する。現在は神戸情報大学院大学で講師として教鞭(きょうべん)をとる。「ソフトウエア工学の基礎を勉強してオールラウンドプレーヤーを目指せ」が技術者育成についての口癖。http://www.kic.ac.jp/professors/sudo/index.html

この記事を評価する

4.5
平均: 4.5 (投票数: 2)
あなたの評価: なし

IT Leaders 毎月無料でお届けいたします

本誌は、読者登録いただくことにより、毎月無料でみなさまのお手元まで直接お届けいたします(書店などでは販売していません)。

企業の情報システムを担当する方々や事業部門のIT担当の方々、およびIT関連プロフェッショナルの方々を対象に、実践的に役立つ情報を掲載、幅広く業務にご活用いただけます。

IT Leaders新規購読お申し込みはこちらから