直接選択法ソートによるソーティング

この直接選択法ソートは、ある意味ではバブルソート以上に「素直」なソートです。

アルゴリズムとしては、データの中から最も小さい要素を探してそれを先頭の要素と交換し、次に2番目に小さい要素を探して2番目と交換する、という事を繰り返します。私たちが普段何かを「並べ替え」る時のアルゴリズム(考え方)そのままと言えるでしょう。
ただ先頭に持ってくるのではなく交換するのは、先頭に持ってくるだけだと先頭のデータが破壊されるので位置を交換して、先頭のデータを先頭に持ってくるデータのところに待避させる必要があるからです。

for (i=0;i<n-1;i++) /* 前の方から確定していく */
    for (j=i+1;j<n;j++) { /* 未確定部分の先頭をその後のデータと比較 */

        if (data[j]<data[i]) {

            w=data[j]; /* 先頭のデータより小さければ交換 */
            data[j]=data[i];
            data[i]=w;

        }

    }

直接選択法ソート本体のプログラムは、こんな感じになります。

まず、先頭のデータとその後ろのデータを次々に比較していって、先頭より小さなデータがあれば交換する。これを最後まで繰り返せば、先頭は最も小さなデータになるわけです。後は、2番目以降のデータに対しても同様にして確定していきます。

今回も、Javaアプレットを用意しましたので、実際にどんなふうにソートされていくのかご覧ください。未確定部分の先頭のデータがそれ以降のデータと次々に比較され、 自分よりも小さいものがあれば交換されていきますね。

プログラミングではちょっとしたデータ処理はもちろん、内部で保持している情報整理などソーティング処理を行う機会は意外と多いものです。そんな時に、この直接選択法によるソートのアルゴリズムを知っていれば、その場ですぐにプログラムを書くこともできるでしょう。

プログラムソース表示

実行すると、直接選択法ソートによる比較と「(現在の順位に相当する要素の)選択」の様子がアニメ表示されます。