HOME»基本情報技術者試験掲示板»[疑似言語]小さい順に並べ替えるプログラムについて
投稿する

[3334] [疑似言語]小さい順に並べ替えるプログラムについて

 ぱんさん(No.1) 
どうしても理解できなかったので教えて下さい。

  K  ←  1
■  K < N
            ・X  ←   1
            ・L  ←  N
    ■  L > K
            ▲ A[L-1] > A[L]
                  ・W  ←  A[L]
                  ・A[L]  ←  A[L-1]
                  ・X  ←  0
            ▼
            ・L  ←  Lー1
    ■
    ▲  X  =  1
            ・K  ←N +  1
    ーーーーー
            ・K  ←K +  1

変数Xがスイッチとして用いられ、X = 1 のときだけ交換するプログラムの問題です。
上から3行目が空欄になっており、答えは上記の通り【X  ←   1】なのですが、
それだと最初の1回目は1になってしまわないのでしょうか。

トレースしてみても、
K=1、L=8の最初の1回目はXが1になるのでは?  と理解ができないです。
どなたか解説をお願いいたします。
2021.05.24 18:26
 ぱんさん(No.2) 
あ、すみません。
変数Xがスイッチとして用いられ、X = 1 のときだけ交換するプログラムの問題です。
と書きましたが、訂正です。

X = 1 のとき
⇒交換なし

X = 0 のとき
⇒交換あり

というプログラムです。
2021.05.24 18:31
さん(No.3) 
この投稿は投稿者により削除されました。(2021.05.25 07:12)
2021.05.25 07:12
そらさん(No.4) 
バブルソートの問題ですよね。

Xをスイッチとして使う、つまりXの値で状態を判断します。

▲  X  =  1
            ・K  ←N +  1
    ーーーーー
            ・K  ←K +  1

この部分をみてわかるように、X=1でK>Nにすることで、強制的にループから抜け出します。

■L>Kの中のループで、1回でも交換が起きれば、X=0となります。

1回も交換が起きない、つまりX=1のままだと、昇順に並び終わった、ということでプログラムが終了します。

X = 1 のとき
⇒交換なし
X = 0 のとき
⇒交換あり
という理解ではなく、
もともとがX=1で、交換がおこったらX=0になる、つまりまだ配列が昇順になりきれていない。
X=1のままなら昇順になったのでプログラム終了。
という考え方です。
2021.05.24 20:51
 ぱんさん(No.5) 
猫さま  そらさま

またお世話になりましてありがとうございます!

>もともとがX=1で、交換がおこったらX=0になる、つまりまだ配列が昇順になりきれていない。
>X=1のままなら昇順になったのでプログラム終了。

なるほど・・意味が分かりました!

猫さま
すみません、説明不足でした。
Nは配列Aの添え字のMAXで、1、2、・・・、Nと問題文に書いてありました。

ご回答ありがとうございました。
2021.05.24 21:41

返信投稿用フォーム

スパム防止のためにスレッド作成日から30日経過したスレッドへの書込みはできません。
© 2010-2024 基本情報技術者試験ドットコム All Rights Reserved.

Pagetop