VBS(8) ソートのアルゴリズム(1)
バブルソート
メニューに戻りたいときはここをクリック。
ソート(sort)とはなんらかの大小関係により整列させることをいう。例えば大きい順に並べるとか小さい順に並べるのは最もシンプルなソートである。
アルゴリズム(algorithm)とはコンピュータに処理させるときの手順を言う。ムハマド・ビン・ムーサ・アル・フワーリズミーという9世紀アラビアの数学者がいたが、その名前アル・ファリズミがなまったものである。
「アル」というのはアラビア語の冠詞なので、アラビア語を語源とする単語には「アル」で始まるものが多い。例えば、アルコール、アルハンブラ、アルジェブラ(代数)、アルカリ、アルケミー(錬金術)
Lesson 1 (変数の値の交換)
a(1) と a(2) を交換するのに、以下の様なプログラムを書いてみた。 dim a(2)
a(1)=1:a(2)=2
a(1)=a(2) : a(2)=a(1)
msgbox a(1) & "," & a(2)
4行目で a(1) に a(2) を代入し、 a(2) に a(1) を代入している。 a(1) と a(2) がうまく交換されていれば、 2,1
と表示されるはずだが、現実には 2,2 と表示される。
つまり4行目の書き方では a(1) と a(2) は交換されないのである。理由はわかるだろうか。
4行目は a(1)=a(2) : a(2)=a(1)
2つ目の文で a(2) に a(1) の値を代入しようとしているが、その前に a(1)=a(2)
という文で元々の a(1) の値は破壊されてしまっているのである。
正しくは、一時的な変数を使って temp=a(1) : a(1)=a(2) : a(2)=temp
のようにしなければならないのである。
Lesson 2 (ソートの方法1 バブル・ソート)
手順
- スタートメニューから Z:ドライブ(個人用)を開く
- 既に作成した、vbsというフォルダーを選択
- メニューから「ファイル → 新規作成 → テキストドキュメント」とする。
- 「新規テキストドキュメント.txt(拡張子が表示されていること!)」というファイルが作成されるので、保存したい名前に変更する。今回は
vbs0802.vbs という名前に変更する。
「拡張子を変更すると、ファイルが使えなくなる可能性があります。変更しますか?」と聞かれるのが「はい(Y)」と答えて良い。
- 今作成した vbs0802.vbs をデスクトップのメモ帳にドラッグ&ドロップする。
- メモ帳が開いて編集できるようになったら、以下のように入力
- 「ファイル -> 上書き保存」として保存する。メモ帳は閉じてかまわない。
- 保存された vbs0802.vbs をダブルクリックして実行する。
- 間違いがあれば、 vbs0802.vbs をデスクトップのメモ帳にドラッグ&ドロップして編集しなおして、保存する。保存後に、もう一度
vbs0802.vbs をダブルクリックして実行してみること。
解説
- これは a(1),a(2),...,a(10) を小さい順に並べ替えるプログラムである。
- 1行目によって配列変数 a(1),...,a(10)が定義され、2行目によって
a(1),a(2),...,a(10)の値が指定されている。2行目には複数の文が書かれているが、1行に複数の文を書きたいときはこのようにコロン(:)で区切る。
- do loop 文は loop の後に条件を書くことが出来る。このときは、loopからの脱出のチェックは loop の最後の部分で行われる。
- do loop 文の内部の処理は以下の通り。
まず、逆転が無いものと仮定して、 gyakuten=0
としておく。
次に隣あった2つをを比較して、逆転があれば、gyakuten=1
とし、さらにその2つを入れ替えておく。
最後まで比較して逆転が無ければ並べ替えは完了しているのでループを脱出し、逆転があれば最初からやりなおす。
- このソート方法をバブルソートと言う。
問題
dim x(30)
x(1)=-9: x(2)=29: x(3)=7: x(4)=28: x(5)=2: x(6)=1: x(7)=2: x(8)=-12: x(9)=13: x(10)=0
x(11)=0: x(12)=-19: x(13)=-3: x(14)=-10: x(15)=5: x(16)=8: x(17)=27: x(18)=15: x(19)=8: x(20)=1
x(21)=-7: x(22)=-12: x(23)=-8: x(24)=17: x(25)=25: x(26)=14: x(27)=16: x(28)=19: x(29)=19: x(30)=-1
上記プログラムに続けて、x(1)〜x(30)を大きい順に並べ替えて表示するプログラムを書け。なお、上記プログラムは Y:ドライブ(提出用)の
教科担任名のフォルダー中の vbs の中に、 vbs08.vbs という名前で保存してあるので、自分のフォルダー内にコピーして名前を変えてから使って良い。
完成したプログラムは vbs08-2-10-11-yourname.vbs
(クラス番号名前は各自のものにせよ)という名前で保存して提出せよ。
憶えていますか?憶えましたか?
- if 文の使い方がわかりますか?
- ソートって何ですか?
- アルゴリズムって何ですか?その語源は?
- バブルソートの手順がわかりますか?
メニューに戻る
前 VBS(7) 繰り返し処理(その2)
次 VBS(9) ソートのアルゴリズム(2) 単純選択ソート
第1回〜第10回の問題の回答
姉妹サイト
古代ローマ (ローマ帝国 の歴史とコイン)