今回は、VBAでのバブルソートコードの一つを作成していきます。。
バブルソートは、ある数値列の隣り合う要素の値を比較して条件に応じた交換を行う数列アルゴリズムです。条件とは値の大小関係です。「値の大きい順(降順)」か「値の小さい順(昇順)」にリストを並び替えます。
このソートを実行すると値の大きいまたは小さい要素が浮かびあがってくるように見えることから、バブル(bubble: 泡)ソートと呼ばれます。
下記の図の数列にバブルソート処理を実行すると、3行目に左から小さい順で並び替えた結果がされる仕組みです。
この処理を実行するコードが下記図になります。
1.データ数の特定
A行に配列された数値の列番号を取得します。[.End(xlToRight)]でA1セルから連続入力セルまでのデータを取得し、[.column]で列番号を数値として返します。
2.数列を配列として定義
配列のインデックスは「0」から始まりますが、「Option Base 1」とモジュール宣言することで、Excelの列番号とインデックス番号を合わせて簡略化します。そして、動的配列を宣言し、要素数を設定します。
3.比較、並び替え
隣り合う数字比較し、右が大きい場合はそのまま、左が大きい場合は入れ替えの処理を行う。
イメージ
(4.6.2.1.8.5) tmp() ⇐ 6と2の場合、6が大きいので「If」の入れ替え処理
(4.‘ ’.2.1.8.5) tmp(6)
↓
(4. 2.2.1.8.5) tmp(6)
↓
(4. 2.6.1.8.5) tmp(6)
この処理を繰り返していき、数列の最大値から固定していきます。
固定処理が終わったら、比較範囲「x」を狭めていきながら、同様の処理を実行していきます。
4.書き込み
数列の並び替え処理が終わったら、数列の内容を3行目に書込んでいきます。
以上でバブルソートのコーディングの紹介を終わります。
ご閲覧頂きありがとうございました。