メインコンテンツへスキップ
見出し画像

【基本情報】配列とループのつまずき解消|隣同士の交換を1周ずつ追う

    配列の交換を1回なら追える。でも、ループに入ると「今の配列」が分からなくなる。

    そんなときは、変数の表とは別に、交換後の配列全体を書いてみましょう。今回は4個の数を使い、隣同士の比較と交換を実演します。全文無料のオリジナル基礎演習です📚

    1.この処理で配列はどう変わる?

    配列aは{6, 2, 5, 1}。配列は1始まり、forの終点は含み、←は代入です。型宣言などを省いた学習用表記を使います。

    for (i を 1 から 3 まで 1 ずつ増やす)
      if (a[i] が a[i + 1] より大きい)
        temp ← a[i]
        a[i] ← a[i + 1]
        a[i + 1] ← temp
      endif
    endfor

    最後の配列を、解説を見る前に書いてください。「1回の比較ごとに何が動いたか」が今回の確認ポイントです。

    2.同じ6が、右へ移動していく

    最初:{6, 2, 5, 1}

    i=1:6と2を比較。6>2なので交換し、{2, 6, 5, 1}。

    i=2:比較するのは、更新後のa[2]=6とa[3]=5です。交換して{2, 5, 6, 1}。

    i=3:6と1を比較して交換。最後は{2, 5, 1, 6}です。

    i=2のとき、最初の配列にあったa[2]=2を使わないことが大切です。代入で配列が変わったら、以降は新しい状態を使います。

    3.tempを使わずに交換できる?

    a[i]←a[i+1]だけを先に実行すると、元のa[i]が上書きされます。その後a[i+1]←a[i]としても、両方が同じ値になります。

    最初の6と2なら、tempへ6を退避→左へ2を入れる→右へ退避した6を戻す、の3段階です。「代入は同時ではなく、上から順に起きる」と考えます。

    4.1周で、全部が並ぶわけではない

    今回の1周では、最大値6が右端へ移りました。ただし{2, 5, 1}はまだ昇順ではありません。

    隣同士の比較と交換を繰り返すバブルソートにつながる処理ですが、このコードは1周分だけです。完成した整列処理と取り違えないようにしましょう。

    またiの最後を4にすると、a[5]を参照してしまいます。4要素で隣のi+1まで読むため、iは3までです。

    5.確認問題

    問1:{2, 5, 1, 6}に同じコードをもう一度実行すると、最後の配列は? 交換回数も答えてください。

    問2:最初から{1, 2, 5, 6}なら、比較は何回、交換は何回?

    問3:5要素の配列で、同じように先頭から隣同士を比較するとき、範囲外を読まない最後のiはいくつ?

    6.解答と解説

    問1:{2, 1, 5, 6}、交換は1回。2>5は偽、5>1は真なので交換、最後の5>6は偽です。交換がない比較も実行されています。

    問2:比較3回、交換0回です。配列が既に整列済みでも、このコードには途中終了の仕組みがないため、3組を比較します。

    問3:i=4です。i+1=5まで読めます。最後の要素番号そのものを、iの終点にしないよう確認します。

    復習するときは「比較回数」と「交換回数」を別々にメモしてください。答えだけ合っても、途中の配列を書けなければ、別の初期値でもう一度追ってみましょう。

    7.配列から探索・整列へ広げるなら

    既存の 科目B・擬似言語 完全攻略(有料記事・無料部分あり) で収録内容を確認できます。説明との相性を無料部分で確かめてからお選びください。購入済みなら、まずその教材の配列・アルゴリズムの復習に活用してください。重複購入は不要です。

    表記の確認:IPA 科目Bサンプル問題。本記事のコード・問題は独自に作成しています。
    次の確認|交換が起きない比較も数える

    配列を{3, 1, 2, 4}として、本文の1周分の処理を実行してください。最後の配列、比較回数、交換回数は?

    ここで解答を見ずに、答えと理由を紙へ書いてください。

    解答:{1, 2, 3, 4}、比較3回・交換2回です。3と1、次に3と2を交換し、3と4は交換しません。

    配列の更新から探索・整列へ練習を広げたい場合は、対応教材の無料部分・到達点・FAQを確認してください。無料の問題だけで手順を説明できれば、まず手持ちの教材で続けられます。購入済み・加入中の教材で読める内容は買い直し不要です。


    あなたへのおすすめ