【基本情報技術者試験・科目B】クイックソートを擬似言語で理解する
基本情報技術者試験(科目B)では、
クイックソートを実装できるかよりも、
- 擬似言語を正しく読めるか
- 処理の流れを追えるか
が問われます。
この記事では、クイックソートを
「試験中に読めること」に焦点を当てて整理します。
目次
クイックソートとは
クイックソートは、配列を分割しながら並び替える
分割統治法の代表的なアルゴリズムです。
一度の処理で全体を並び替えるのではなく、
- 基準となる値を1つ決める
- 配列を左右に分ける
- 同じ処理を繰り返す
という流れで進みます。
クイックソートの考え方
クイックソートの基本的な考え方は次の通りです。
- 配列の中から 基準値(pivot) を選ぶ
- pivot より小さい要素を左側に集める
- pivot より大きい要素を右側に集める
- 左右の配列に対して、同じ処理を繰り返す
重要なのは、
pivot を基準に配列を分けていくという点です。
基本情報試験向け 擬似言語
試験で使われる表記に合わせた、
シンプルな擬似言語例です。
PROCEDURE QuickSort(A)
IF LENGTH(A) > 1 THEN
pivot ← A[1]
L ← pivot より小さい要素の配列
R ← pivot より大きい要素の配列
QuickSort(L)
QuickSort(R)
A ← L + pivot + R
ENDIF
ENDPROCEDURE
読み取りのポイント
- 代入は = ではなく ←
- 配列の添字は 1 から始まる
- 再帰呼び出しはL と R に対して行われている
サンプルデータで処理を追う
次の配列を例に、処理の流れを確認します。
A ← [ 5, 2, 4, 1, 3 ]
1回目の処理
- pivot ← 5
- L ← [ 2, 4, 1, 3 ]
- R ← [ ]
[ 2, 4, 1, 3 ] + 5
この時点で、
5 は最終位置が確定しています。
2回目(左側の配列)
[ 2, 4, 1, 3 ]
- pivot ← 2
- L ← [ 1 ]
- R ← [ 4, 3 ]
[ 1 ] + 2 + [ 4, 3 ]
さらに再帰を進めると…
最終的に配列は次のようになります。
[ 1, 2, 3, 4, 5 ]
試験でよくある勘違い
クイックソートは速いアルゴリズム?
理論的には高速ですが、
試験では速度比較はほとんど問われません。
重要なのは処理の流れです。
その場で要素を入れ替える?
試験の擬似言語では、
- 配列を分割
- 結合して結果を作る
という 概念的な書き方 が使われます。
pivot は必ず中央値?
試験では、
- 先頭要素
- 任意の要素
が pivot として使われることが多く、
中央値である必要はありません。
科目Bでの着眼点
- 再帰が どこで終了するか
- どの時点で 値が確定するか
- 1回の処理では 全体が完成しないこと
特に、
この時点で確定している要素はどれか
という問い方は頻出です。
まとめ
- クイックソートは基準値で分割し、同じ処理を繰り返すアルゴリズム
- 実装できなくても問題ありません
- 擬似言語を読んで、処理を追えることが重要です
基本情報技術者試験では、
「動きを理解しているか」が合否を分けます。
訪問数 3 回, 今日の訪問数 3回


ディスカッション
コメント一覧
まだ、コメントがありません