【Day19】「整列法(ソートアルゴリズム)」と午後のアルゴリズム問題

投稿者: | 2025年7月26日

1. 🔄 整列(ソート)って何?

整列(ソート)とは、データをある規則(たとえば昇順や降順)に並び替える処理のことです。
基本情報技術者試験では、この「並び替えの考え方やアルゴリズムの特徴」を理解しておくことがとても大切なようです。


2. 🧮 よく出る整列アルゴリズム3選!

① バブルソート(Bubble Sort)

  • 隣り合う要素を比べて、大きい(または小さい)方を後ろに移動。
  • 何回も繰り返して、最後には一番大きい(または小さい)要素が端に集まる。
  • 特徴:単純で実装しやすいが、遅い(O(n²))
# Pythonイメージ
for i in range(len(A)-1):
for j in range(len(A)-i-1):
if A[j] > A[j+1]:
A[j], A[j+1] = A[j+1], A[j]

② 選択ソート(Selection Sort)

  • 配列から「最小(または最大)」の値を探し、先頭と交換。
  • これを未整列部分で繰り返す。
  • 特徴:交換回数が少ないが、探索に時間がかかる(O(n²))
for i in range(len(A)-1):
min_index = i
for j in range(i+1, len(A)):
if A[j] < A[min_index]:
min_index = j
A[i], A[min_index] = A[min_index], A[i]

③ 挿入ソート(Insertion Sort)

  • 配列の左から1つずつ取り出して、正しい位置に「挿入」していく。
  • 特徴:すでに整列されているデータに強い(O(n) 〜 O(n²))
for i in range(1, len(A)):
key = A[i]
j = i - 1
while j >= 0 and A[j] > key:
A[j + 1] = A[j]
j -= 1
A[j + 1] = key

3. 📘 午後問題:アルゴリズムの穴埋めって?

午後問題では、擬似言語で記述されたアルゴリズムの一部が空欄になっており、それを埋める問題が出題されます。

例題:バブルソートの一部が空欄になっている

変数 A は要素数 N の配列である。
以下は、バブルソートにより A を昇順に並べ替える擬似言語である。

(1) i ← 0 から N−2 まで繰り返す
(2) j ← 0 から N−2−i まで繰り返す
(3) □1
temp ← A[j]
A[j] ← A[j+1]
A[j+1] ← temp

□1 に入るべき式は?

A[j] > A[j+1]
理由:昇順にしたいので、左側が大きかったら交換する必要がある。


4. 🎯 解き方のコツ

ポイント内容
擬似コードの読み解き実際のコードに似ているが、少し抽象的なので慣れが必要。
変数の役割をつかむループ変数や配列の意味を正しく理解する。
トレース練習実際に小さな配列で手で動かしてみると理解が早い!
パターン暗記はNG仕組みから理解することで、応用問題にも対応できる。

5. 🧪 おすすめの練習法

  • 基本情報技術者試験 午後問題 過去問(平成〜令和)を実際に解いてみる
  • ソート アルゴリズム 可視化」などでグラフィカルな説明を見て動きを理解する

✍️ まとめ

  • 整列(ソート)は、データを並び替える基本操作で、バブル・選択・挿入の3つが頻出。
  • 午後のアルゴリズム問題は、コードの空欄補完と処理の理解がセットで問われる。
  • コツは「トレース練習」+「本質理解」。