基本情報アルゴリズムについて質問です。教科書P245なぜ、エが正解ですか?

1件の回答

回答を書く

1080927

2026-03-07 23:05

+ フォロー

なぜエが正解?とありますが・・・コではないでしょうか。



昇順ソートですね。

仮にAを[4,2]としておきます。

設問よりA[0]とA[1]を整列し・・・とあります。

前後関係が逆転していれば、入れ替える必要があります。

A[0]=4、A[1]=2ですから逆転しており入れ替えることになります。

この場合、2つを入れ替える命令はこのブログラムではビルトインされていないので、処理を自分で作っています。



具体的には、

小さいA[1]の2を退避しておき、A[1]をA[0]の4で上書き。

あとで退避しておいた2をA[0]に格納ということになります。

または逆に大きい方のA[0]の4を退避しておきA[0]をA[1]の2で上書き。

後で退避しておいた4をA[1]に格納ということになります。



お誂え向きにTmpという変数が用意されています。Temporary(一時的)という意味でよく使われる変数名です。なのでここに退避させたい数値を入れておき、後で戻すのでしょう。



さて、ここまで推測したところでプログラムを見ていきます。

5行目にIdxは1から始まり、

6行目でTmpにA[1]を退避しています。

7行目ではIdx2←Idx1-1ですから、Idx2は0です。

どうやら、A[Idx2]はA[Idx1]の1個前のようですね。

つまりA[Idx2]=A[Idx-1]であり、A[Idx1}=A[Idx2+1]ということになります。

(常にではありません。7行目終了時点ではという意味です)



A[0]=4、A[1]=2なので逆転させたい。

空欄aの回答群を見ると、A[Idx2-1]にA[Idx2]を代入するか、A[Idx2+1]にA[Idx2]を代入するかの2択です。

Idx2は0ですから、A[Idx2-1]は論外です。配列のインデックスにマイナスは使えません。

(A[-1]はダメという意味であって、Idx2=-1自体は問題ありません)

したがってカ~コの中に正解があります。



残りは空欄bです。

プログラムを見るとTmpが格納はされるけどどこかにそれを使って代入する行為が見られません。

なので空欄bでそれを行うと推測されます。

カ~コでTmpを何かに代入するのはクとコのみです。

クはA[Idx2]に、コはA[Idx2+1]に代入しています。

さて、どちらでしょうか。



while文を見ると、Idx2≧0という条件があります。

ということはIdx2はマイナスの値を取ることがあり、その際はwhile文の中を処理しないためにこの条件が加わっていることがわかります。

そういえば13行目にIdx2←Idx2-1があります。最初はIdx2はゼロでしたからここでマイナス1になりますね。



となるとクのA[Idx2]は不適であり、A[Idx2+1}が適していることがわかります。



このように問題を単純化(仮の配列を最小の2個、最初から逆転したもので設定)したうえで推測していくと素早く解くことができます。

うったえる有益だ(0シェアするブックマークする

関連質問

Copyright © 2026 AQ188.com All Rights Reserved.

博識 著作権所有