[疑似言語]小さい順に並べ替えるプログラムについて
ぱんさん
(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になるのでは? と理解ができないです。
どなたか解説をお願いいたします。
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 のとき
⇒交換あり
というプログラムです。
変数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のままなら昇順になったのでプログラム終了。
という考え方です。
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)
猫さま そらさま
またお世話になりましてありがとうございます!
なるほど・・意味が分かりました!
猫さま
すみません、説明不足でした。
Nは配列Aの添え字のMAXで、1、2、・・・、Nと問題文に書いてありました。
ご回答ありがとうございました。
またお世話になりましてありがとうございます!
>もともとがX=1で、交換がおこったらX=0になる、つまりまだ配列が昇順になりきれていない。
>X=1のままなら昇順になったのでプログラム終了。
なるほど・・意味が分かりました!
猫さま
すみません、説明不足でした。
Nは配列Aの添え字のMAXで、1、2、・・・、Nと問題文に書いてありました。
ご回答ありがとうございました。
2021.05.24 21:41
広告
返信投稿用フォーム
スパム防止のためにスレッド作成日から30日経過したスレッドへの投稿はできません。
広告