コンパクトなプログラムvs.直感でわかるプログラム

2008年5月16日(金)
須藤 克彦

一番小さいのをどう選ぶ?

 さて、配列の中から一番小さいものを「取り出す」関数を作らなければなりません。考え方はいろいろとあるでしょうが、ここでは次のように考えてみました。

 (1)左から順に見ていくとして、見た中で一番小さいものの「場所」を覚えておく。

 (2)順にその「場所」にあるものとを比較して、もっと小さいものが現れたら、覚えておいた「場所」を変更する。

 (3)これを最後まで繰り返す。

 一番小さなものが置かれている場所を覚えておいて、必要に応じてその場所を変更しよう、というわけです。

 配列から一番小さいものを取り出す関数「pickup_small()」を作りましょう。図2の上のような感じです。

プログラミングのポイントは?

 一番小さいものが置かれている「場所」を「$index」で表しています(1)。はじめは最初のものを仮の候補としておいて、その次のものから順に見ていき(2)、$indexの場所にあるものよりも小さなものが出てきたら(3)、その場所情報を更新します(4)。

 これで、このループを抜けたときには$indexには、一番大きなものの「位置」が残っていることになります。

 あとは、この場所にあるものを取り出すだけですが、取り出した際に、それが元の配列に残っていては具合が悪いので配列から取り去ります。そのためには「array_splice()」が便利でしょう(5)。ほかにも手はあるかもしれませんが...。

 array_splice() 取り出したものを要素とする「配列」として返すので、最後のように、その最初の(つまり1つだけの)要素を返すようにします(6)。

 これで「pickup_small()」は一応は完成なのですが、「$arr」が空っぽになるタイミングがあります。それを考慮しないといけませんね。それで、初めに引数をチェックする機能を加えましょう。(図2の(7))

 これで完成です。

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

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています