next up previous contents
Next: Problem 6 Up: 配列を用いる Previous: SWAPを用いた変数内容の入れ替え   Contents

Sample Program 9

このサンプルプログラムは、サンプル8とは異なり、配列xに格納された 5つの数字を関数swapを用いて昇順に並べ替えるものです。 以下にその動作を説明します。


Table: x(1)からx(5)の並べ替えの模式図。
x(1) x(2) x(3) x(4) x(5)
\fbox{5    8} 7 0 2  
5 \fbox{8    7} 0 2  
5 7 \fbox{8    0} 2  
5 7 0 \fbox{8    2}
\fbox{5    7} 0 2 8  
5 \fbox{7    0} 2 8  
5 0 \fbox{7    2} 8  
\fbox{5    0} 2 7 8  
0 \fbox{5    2} 7 8  
\fbox{0    2} 5 7 8  


100行目でxを要素5の配列であると宣言します。
110行目からiを1から5にかえながら140行目までを繰り返します。
その繰り返しの中で、120行でx(i)にdataから数字が読み込まれます。
130行でそれを印字します。
全ての初期の数字のならびが印字されたら、150行で改行します。
次に別のfor next loopが始まります。このとき、iは5から2まで間隔を-1(1ずつiを減じながら)にして210行目 までを繰り返します。
同次に170行目からjを2からiまで変化させながら200行目までを繰り返しています。先ほどのfor nextと入れ篭になっています。
まず最初は、iは5でjは2です。このi,jから、180行目の条件文は、「もしx(1)=<x(2)であったら200行へ飛び、そうでなければx(1)とx(2)を入れ替えよ」となります。 もしx(1)がx(2)以上であったら、x(1)と x(2)は入れ替わります。
これをiを5から4まで変化させて繰り返します。即ち、2つずつ隣り合った数を比較して、より大きい数を一つずつ右へ移動させることになります。この大きなfor i= 5 to 2 step -1 next iの繰り返しの最初のステップ(i=5)の作業が終了すれば、図の上から4番目の四角で囲った部分までの入れ替えが一巡します。
この一巡によって、もしx(1)に最大値があった場合、一番右へ移動することが可能であることに留意して下さい。
ここまでで、x(1)に最大値があっても、x(5)まで移動することができる。このため、x(5)を再度いじる必要はなくなったわけです。
まだ全ての必要な入れ替えには、図を見ての通り、達していないので、next i の次に、160行目に戻ったら今度はiを4にかえて入れ篭になっている小さいfor nextの実行に移ります。
先ほどと同様にx(1)とx(2)を比較を実施し、x(2)がx(1)よりも小さい場合は、x(1)とx(2)は入れ替わります。
次にx(2)とx(3)を比較して、x(3)がx(2)よりも小さい場合は、x(3)とx(2)は入れ替わります。
iが4なので、この時点で、これをx(3)とx(4)の比較までしか、行う必要がありません。
次にiを3として同様の入れ替えが行われます。
これをi=2まで繰り返せば、昇順に入れ替える作業が全て終了します。


\begin{code}
100 dim x(5)
110 for i=1 to 5
120 read x(i)
130 print x(i);
140...
... i=1 to 5 : print x(i); : next i : print
230 data 5,8,7,0,2
990 end
\end{code}


next up previous contents
Next: Problem 6 Up: 配列を用いる Previous: SWAPを用いた変数内容の入れ替え   Contents
Takeyoshi Nagai 2013-10-07