配列を逆順(反転)にする — ステップ図解(初心者向け)
このドキュメントは、配列の要素をインプレースで反転するアルゴリズムを図(ステップごとの表)で可視化したものです。Java の基本コードと、各ループ反復で配列がどう変わるかを表で追えます。
1. 目的(おさらい)
配列 {12, 24, 18, 31, 17} を {17, 31, 18, 24, 12} のように順番を逆にする。
- 手法:左右から寄せて要素を入れ替える(
fとlを使う)。 - 重要:入れ替え(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));
}
}
Java3. ステップごとの表(配列長 5 の例)
下の表は、各ループ反復の始めにおけるインデックス f と l、および配列の状態を示します。
初期状態
| インデックス | 0 | 1 | 2 | 3 | 4 |
|---|---|---|---|---|---|
| 値 | 12 | 24 | 18 | 31 | 17 |
1回目の交換(f=0, l=4)
- 操作:
temp = src[0]→src[0] = src[4]→src[4] = temp
| インデックス | 0 | 1 | 2 | 3 | 4 |
|---|---|---|---|---|---|
| 値(交換前) | 12 | 24 | 18 | 31 | 17 |
| 値(交換後) | 17 | 24 | 18 | 31 | 12 |
2回目の交換(f=1, l=3)
- 操作:
temp = src[1]→src[1] = src[3]→src[3] = temp
| インデックス | 0 | 1 | 2 | 3 | 4 |
|---|---|---|---|---|---|
| 値(交換前) | 17 | 24 | 18 | 31 | 12 |
| 値(交換後) | 17 | 31 | 18 | 24 | 12 |
ループ終了の確認(f=2, l=2)
f < lが false になるためループ終了。中央の要素(インデックス 2)はそのまま。
| インデックス | 0 | 1 | 2 | 3 | 4 |
|---|---|---|---|---|---|
| 値(最終) | 17 | 31 | 18 | 24 | 12 |
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. 練習用ワークシート(手で追う)
次の配列をもとに、ステップごとに f と l、配列の状態を書いてみてください。
{1,2,3,4}{5,6,7}{10,11,12,13,14,15}でfrom=1,to=4
8. まとめ
- 配列反転は「左右から交換して中央まで進む」だけ。表で追うとどの要素がいつ動くかが一目でわかります。
- 初心者はまず手で配列を紙に書き、各ステップで
tempを使ったスワップを追う練習をすると理解が早くなります。
