プログラミングの基礎(擬似言語のトレース)

次の手続 bubble は、整数型の配列 data を昇順に並べ替えるバブルソートである。swap(data, j, k) は data[j] と data[k] の値を入れ替える手続で、配列の要素番号は1から始まる。プログラム中の【a】に入れる字句はどれか。

○bubble(整数型の配列: data)
  整数型: n ← dataの要素数
  for (i を n から 2 まで 1 ずつ減らす)
    for (j を 1 から 【a】 まで 1 ずつ増やす)
      if (data[j] > data[j + 1])
        swap(data, j, j + 1)
      endif
    endfor
  endfor
  1. Ai
  2. Bn − i
  3. Ci − 1
答えと解説を見る

正解:C. i − 1

外側の i は、その回の走査で最大値を送り込む位置(末尾から n、n − 1、…、2)を表します。内側では data[j] と data[j + 1] を比べるので、j の終値を i − 1 にすると data[i] までの隣どうしを比べ、配列の範囲を超えません。i = n の1回目で最大値が data[n] に移り、次は data[n − 1] までというように、走査する範囲が1つずつ狭まります。【a】を i にすると、1回目に data[n + 1] を参照してしまいます。

  • A. i = n のとき j = n で data[n + 1] を参照し、配列の範囲を超えます。
  • B. i = n のとき j の終値が0になって何も比べないなど、走査の範囲が逆になり、正しく並びません。{5, 3, 8, 1, 4} は {3, 5, 1, 8, 4} になります。
  • C. 正しい。data[i] までの隣どうしを比べ、最大値を data[i] へ送ります。
この分野を解く 分野ページへ

関連する計算ツール

プログラミングの基礎(擬似言語のトレース)の参考書を探す PR

Amazonの検索結果へのリンクです。Amazonのアソシエイトとして、半導体教室は適格販売により収入を得ています。

プログラミングの基礎(擬似言語のトレース)のほかの問題

  1. ÷ は除算で、整数型の変数(引数を含む)に代入するときは小数点以下を切り捨てる。次のプログラムは、昇順に整列された整数型の配列 data(要素番号は1から始まる)で、x 以上の値が最初に現れる要素番号を lo に求める。x は data の最後の要素以下とする。プログラム中の【a】に入れる字句はどれか。
  2. 要素数5の整数型の配列 st と整数型の変数 top でスタックを表す。st の要素はすべて0、top は0から始める。push(v) は top に1を加えてから st[top] ← v を行い、pop() は st[top] の値を返してから top から1を引く(st の要素は変えない)。次のプログラムを実行した後の top と st の組はどれか。
  3. 要素数4の文字列型の配列 q を環状に使うキューがある。head と tail の初期値は1で、enq(v) は q[tail] ← v の後に tail ← tail mod 4 + 1 を行い、deq() は q[head] の値を返した後に head ← head mod 4 + 1 を行う。次のプログラムを実行したとき、「E」が格納される q の要素はどれか。
  4. 次のプログラムは、配列 next で要素どうしをつないだ連結リストを、要素番号1の要素から順にたどって出力する。配列の要素番号は1から始まる。next の値0はリストの終わりを表す。出力される値の並びはどれか。
  5. 次のプログラムは、配列 next でつないだ連結リスト A → C → E → D → B の「C」(要素番号3)の直後に、val[6] の「F」を挿入してから、要素番号1の要素から順にたどって出力する。配列の要素番号は1から始まる。next の値0はリストの終わりを表す。出力が A, C, F, E, D, B となるように【a】に入れる処理はどれか。