08 整列(ソート)のアルゴリズム

【知識】

配列などのデータをある規則で並べ替えること。小→大が昇順、大→小が降順

基本の3つ(考え方を押さえる)

整列法考え方(一言で)
選択ソート(基本選択法)範囲内の最小値を選んで先頭へ置く、を繰返す
バブルソート(基本交換法)隣どうしを比較・交換して、大きい値を端へ運ぶ
挿入ソート(基本挿入法)整列済みの中の正しい位置に挿入していく

改良版(名前と特徴だけ)

改良法もとの方法ポイント
ヒープソート選択法木構造(ヒープ)で最大/最小を取り出す
シェーカーソートバブル前後の両方向に交互にバブル
クイックソート交換法基準値(ピボット)で大小2グループに分割、を繰返す
シェルソート挿入法間隔をあけて整列→徐々に間隔を狭める
マージソート半分ずつに分割→整列しながら併合(マージ)

計算量(オーダ)

オーダ増え方n を10倍にすると手間は
O(n log n)n 比例より少し多い程度約10倍+少し
O(n²)n の2乗で急増約100倍

主な整列法のオーダ

整列法比較回数オーダなぜそのオーダか
交換法(バブル)・選択法・挿入法(基本3種)n(n−1)/2O(n²)「n 個を n 回」の二重ループで総当たりするため
シェルソートO(n^1.25〜1.5)挿入法を間隔をあけて行い、無駄な比較を減らした改良版
クイック・ヒープ・マージn log₂nO(n log n)データを半分ずつに分割しながら整列するため(分割の深さが log n)
考え方で整理:総当たりの基本3種は遅い O(n²)。 「分割してから処理する」クイック・ヒープ・マージは速い O(n log n)
手順の中に「二重ループ」があれば O(n²)、「半分ずつに分ける」があれば O(n log n) と見当がつく。

【演習】理解度チェック

Q1 ★バブルソートのトレース

データ列 5, 3, 8, 1昇順にバブルソート(隣どうし比較・交換)する。 1巡目が終わった時点の並びはどれか。

▶ トレース(1巡目)を見る
手順並び
初期5 3 8 1
5,3比較 → 交換3 5 8 1
5,8比較 → そのまま3 5 8 1
8,1比較 → 交換3 5 1 8(最大値8が右端に確定)
解説を表示

正解:イ(3, 5, 1, 8)

隣どうしを左から比較し、左>右なら交換。1巡すると最大値が右端に確定する(上のトレース)。

▼速解法:バブルソートは1巡ごとに端に1つ確定する。「1巡目=最大値が右端に来る」だけ覚えれば、全部並べ替えなくても答えが絞れる。

補足:同じ列でも選択ソート1巡目なら最小値1を選んで先頭と交換 → 1, 3, 8, 5。方式で結果が変わるのでどの方式かを必ず確認。

▼ 解説つきの類題を探す:過去問道場・分野別「アルゴリズム」

Q2(H30秋 問6)★整列法の説明の区別(頻出)

クイックソートの処理方法を説明したものはどれか。

解説を表示

正解:ウ

▼速解法:キーワードで一発判定。「基準値で分割」=クイック/「最小値を選ぶ」=選択/「正しい位置に挿入」=挿入/「隣を交換」=バブル。

過去問道場で確認

Q3 ★選択ソートのトレース

5, 3, 8, 1 を選択ソート(最小値を先頭へ)で昇順に整列する。1巡目が終わった時点の並びはどれか。

解説を表示

正解:イ(1, 3, 8, 5)

選択ソート1巡目は、全体の最小値 1 を選んで先頭要素 5 と交換する → 1, 3, 8, 5

操作並び
1巡目最小値 1 を先頭へ1, 3, 8, 5
2巡目残り(3,8,5)の最小 3 は既に位置1, 3, 8, 5
3巡目残り(8,5)の最小 5 を前へ1, 3, 5, 8

参考:同じ列でもバブルソート1巡目は 3, 5, 1, 8(Q1参照)。方式によって途中経過が違う点に注意。

▼ 解説つきの類題を探す:過去問道場・分野別「アルゴリズム」

Q4 ★バブルソートのトレース(2巡目)

次のデータをバブルソート(隣どうしを比較し、左>右なら交換)で昇順に並べ替える。2巡目が終わった時点の並びはどれか。

53814
初期状態。1巡ごとにまだ確定していない範囲の最大値が右端に1つずつ確定していく。
解説を表示

正解:ア(3, 1, 4, 5, 8)

1巡目(最大 8 が右端へ確定):

35148

2巡目(次に大きい 5 が確定):

31458

→ 2巡目終了時は 3, 1, 4, 5, 8。ウ(3,5,1,4,8)は1巡目終了時なので混同に注意。

▼速解法:バブルソートは1巡ごとに端へ1つ確定。「何巡目か」=確定した個数。全部を並べ替えなくても、確定していく端から答えを絞れる。

▼ 解説つきの類題を探す:過去問道場・分野別「アルゴリズム」

整列法の特徴(各自演習):各ソートの特徴・計算量を問う問題は 分野別「アルゴリズム」でまとめて解ける。

【練習リンク】