Java | 配列を逆順に並べ替える方法

Java Java
スポンサーリンク

配列を逆順(反転)にする — ステップ図解(初心者向け)

このドキュメントは、配列の要素をインプレースで反転するアルゴリズムを図(ステップごとの表)で可視化したものです。Java の基本コードと、各ループ反復で配列がどう変わるかを表で追えます。


1. 目的(おさらい)

配列 {12, 24, 18, 31, 17}{17, 31, 18, 24, 12} のように順番を逆にする

  • 手法:左右から寄せて要素を入れ替える(fl を使う)。
  • 重要:入れ替え(swap)には一時変数 temp を使う。

2. 基本コード(インプレース反転)

import java.util.Arrays;

class ReverseExample {
    public static void main(String[] args) {
        int[] src = {12, 24, 18, 31, 17};
        System.out.println("元: " + Arrays.toString(src));

        for (int f = 0, l = src.length - 1; f < l; f++, l--) {
            int temp = src[f];
            src[f] = src[l];
            src[l] = temp;
        }

        System.out.println("反転後: " + Arrays.toString(src));
    }
}
Java

3. ステップごとの表(配列長 5 の例)

下の表は、各ループ反復の始めにおけるインデックス fl、および配列の状態を示します。

初期状態

インデックス01234
1224183117

1回目の交換(f=0, l=4)

  • 操作:temp = src[0]src[0] = src[4]src[4] = temp
インデックス01234
値(交換前)1224183117
値(交換後)1724183112

2回目の交換(f=1, l=3)

  • 操作:temp = src[1]src[1] = src[3]src[3] = temp
インデックス01234
値(交換前)1724183112
値(交換後)1731182412

ループ終了の確認(f=2, l=2)

  • f < l が false になるためループ終了。中央の要素(インデックス 2)はそのまま。
インデックス01234
値(最終)1731182412

4. 別の見せ方:矢印での可視化(同じ操作を別表現で)

初期: 12 ← 24 ← 18 ← 31 ← 17 ではなく、左右の対応を以下のように示すと分かりやすいです:

位置: 0   1   2   3   4
値:  12  24  18  31  17
対応: (0↔4) (1↔3) (2)

1回目: (0↔4) を交換 → 17 24 18 31 12

2回目: (1↔3) を交換 → 17 31 18 24 12

中央 (2) は変更なし。


5. 部分反転(from〜to の範囲だけ反転)

部分だけ反転する場合の補助関数の例:

void reverseRange(int[] a, int from, int to) {
    for (int f = from, l = to; f < l; f++, l--) {
        int t = a[f];
        a[f] = a[l];
        a[l] = t;
    }
}
Java

部分反転のステップ例({10,11,12,13,14,15} を from=1,to=4)

初期: 10 | 11 12 13 14 | 15
1回目(f=1,l=4): swap 11↔14 → 10 | 14 12 13 11 | 15
2回目(f=2,l=3): swap 12↔13 → 10 | 14 13 12 11 | 15
終了。


6. よくある間違い(図で注意)

  • f <= l にしてしまうと中央の要素を不必要に交換する(余計な操作)。
  • temp を使わずに直接2回代入すると元の値が失われる。図では「上書きされる」ことをいつも思い出してください。

7. 練習用ワークシート(手で追う)

次の配列をもとに、ステップごとに fl、配列の状態を書いてみてください。

  1. {1,2,3,4}
  2. {5,6,7}
  3. {10,11,12,13,14,15}from=1,to=4

8. まとめ

  • 配列反転は「左右から交換して中央まで進む」だけ。表で追うとどの要素がいつ動くかが一目でわかります。
  • 初心者はまず手で配列を紙に書き、各ステップで temp を使ったスワップを追う練習をすると理解が早くなります。
タイトルとURLをコピーしました