この直接選択法ソートは、ある意味ではバブルソート以上に「素直」なソートです。 アルゴリズムとしては、データの中から最も小さい要素を探してそれを先頭の要素と交換し、次に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アプレットを用意しましたので、実際にどんなふうにソートされていくのかご覧ください。未確定部分の先頭のデータがそれ以降のデータと次々に比較され、 自分よりも小さいものがあれば交換されていきますね。 プログラミングではちょっとしたデータ処理はもちろん、内部で保持している情報整理などソーティング処理を行う機会は意外と多いものです。そんな時に、この直接選択法によるソートのアルゴリズムを知っていれば、その場ですぐにプログラムを書くこともできるでしょう。 実行すると、直接選択法ソートによる比較と「(現在の順位に相当する要素の)選択」の様子がアニメ表示されます。 |