この記事ではデータ整列のアルゴリズムであるバブルソート、クイックソートについてIT初心者にも分かりやすく解説します。
バブルソート
- バブルソートは、隣接する数字を比較して右の方が小さければ入れ替えて昇順に整列させるアルゴリズム
クイックソート
- クイックソートは、基準値を決めて、それより大きい数字のグループと小さい数字のグループに分ける、を繰り返して昇順に整列させるアルゴリズム
他に紹介している整列アルゴリズム(選択肢にはなるけど、答えにはあまりならないアルゴリズム)
- 選択ソート
- 挿入ソート
- マージソート
- ヒープソート
応用情報ではデータ整列のアルゴリズムであるバブルソート、クイックソートに関する問題が出ます。是非最後までご覧ください。
バブルソート
バブルソートとは、隣接する数字を比較して右の方が小さければ入れ替えて昇順に整列させるアルゴリズムです。
具体的な手順は次の通りです。
- 先頭2つの数字を比較する。
- 右の方が小さければ入れ替える。左の方が小さければそのままにする。
- 次の2つの数字を比較する。
- 右の方が小さければ入れ替える。左の方が小さければそのままにする。
- これを最後まで続けると、一番右が一番大きい数字になる。一番右は確定。
- ①~⑤を、一番右の数字を除いて行う。右から二番目の数字が二番目に大きい数字になる。右から二番目は確定。
- これを繰り返すことで、右から大きい数字順に並べていく。
バブルソートが「バブル」と呼ばれるのは、泡が水面に上がってくるように、大きい数字が右に移動していくからだそうです。
クイックソート
クイックソートとは、基準値を決めて、それより大きい数字のグループと小さい数字のグループに分ける、を繰り返して昇順に整列させるアルゴリズムです。
具体的な手順は次の通りです。
- 基準値を決める。
- 基準値より大きい数字と小さい数字をそれぞれグループにする。
- ②で作ったグループの中で、それぞれ基準値を決める。
- それぞれのグループ内で基準値より大きい数字と小さい数字のグループを作る。
- 基準値を決める→グループを作る、を整列するまで繰り返す。
その他の整列アルゴリズム
最近、答えとしての出題はされていませんが、選択肢にはなっている整列アルゴリズムを簡単に紹介します。
選択ソート
対象データの中から最小(最大)の数字を探し先頭と交換する、を繰り返して整列するアルゴリズムです。
挿入ソート
対象データを「整列済みグループ」と「未整列グループ」に分けます。「未整列グループ」からデータを1つ選択し、「整列済みグループ」の適切な場所に挿入する、を繰り返して整列するアルゴリズムです。
マージソート
対象データを、それぞれのグループに含まれる数字の数が1個になるまで分割します。そして、再度、列に戻すときにお互いの数字を比較して並び替えるアルゴリズムです。
ヒープソート
対象データの未整列部分を順序木にして、そこから最小値(又は最大値)を取り出して整列部分に加えます。再度、未整列部分を順序木にして、最小値(又は最大値)を取り出して整列部分に加える、を繰り返して整列するアルゴリズムです。
ちなみに、順序木の親子関係は次のようなものです。
親≧子の順序木の場合は、全ての親子関係が親≧子となるので、根は最大値になります。
逆に、親≦子の順序木の場合は、根は最小値になります。
応用情報技術者試験での出題例
令和6年度春期問7
応用情報技術者
午前試験 令和6年度春期問7
整列方法に関するアルゴリズムの記述のうち,バブルソートの記述はどれか。ここで,整列対象は重複のない1から9の数字がランダムに並んでいる数字列とする。
ア 数字列の最後の数字から最初の数字に向かって,隣り合う二つの数字を比較して小さい数字が前に来るよう数字を入れ替える操作を繰り返し行う。
イ 数字列の中からランダムに基準となる数を選び,基準より小さい数と大きい数の二つのグループに分け,それぞれのグループ内も同じ操作を繰り返し行う。
ウ 数字列をほぼ同じ長さの二つの数字列のグループに分割していき,分割できなくなった時点から,グループ内で数字が小さい順に並べる操作を繰り返し行う。
エ 未処理の数字列の中から最小値を探索し,未処理の数字列の最初の数字と入れ替える操作を繰り返し行う。
正解は”ア”
ア バブルソートの説明です
イ クイックソートの説明です
ウ マージソートの説明です
エ 選択ソートの説明です
令和5年度秋期問6
応用情報技術者
午前試験 令和5年度秋期問6
あるデータ列を整列したら状態0から順に状態1,2,・・・,Nへと推移した。整列に使ったアルゴリズムはどれか。
状態0 3,5,9,6,1,2
状態1 3,5,6,1,2,9
状態2 3,5,1,2,6,9
・
・
・
状態N 1,2,3,5,6,9
ア クイックソート
ウ バブルソート
イ 挿入ソート
エ ヒープソート
正解は”ウ”
状態1で最も大きい「9」が一番右に行き、
状態2で2番目に大きい「6」が右から2番目に行きました。
これはバブルソートの手順です。
令和5年度春期問7
応用情報技術者
午前試験 令和5年度春期問7
配列に格納されたデータ2,3,5,4,1に対して,クイックソートを用いて昇順に並び替える。2回目の分割が終わった状態はどれか。ここで,分割は基準値より小さい値と大きい値のグループに分けるものとする。また,分割のたびに基準値はグループ内の配列の左端の値とし,グループ内の配列の値の順番は元の配列と同じとする。
ア 1,2,3,5,4
イ 1,2,5,4,3
ウ 2,3,1,4,5
エ 2,3,4,5,1
正解は”ア”
1回目の分割後
分割前の状態:2,3,5,4,1
基準値は2なので、2より小さいグループと大きいグループに分けましょう。
分割後の状態:【1】,2,【3,5,4】
2回目の分割後
分割前の状態:【1】,2,【3,5,4】
左側の基準値は1、右側の基準値は3です。それぞれのグループで小さい値のグループと大きい値のグループに分けましょう。
分割後の状態:1,2,3,【5,4】
よって、答えはアです。
令和4年度秋期問6
応用情報技術者
午前試験 令和4年度秋期問6
未整列の配列A[i](i=1,2,…,n)を,次の流れ図によって整列する。ここで用いられる整列アルゴリズムはどれか。
ア クイックソート
ウ 挿入ソート
イ 選択ソート
エ バブルソート
正解は”エ”
ループ2に注目してみましょう。
A[n]とA[n-1](隣り合う数字)を比較して、A[n]<A[n-1]の場合、
A[n]とA[n-1]の順番を入れ替えています。
この特徴にあう整列アルゴリズムはバブルソートです。
令和3年度秋期問5
応用情報技術者
午前試験 令和3年度秋期問5
バブルソートの説明として,適切なものはどれか。
ア ある間隔おきに取り出した要素から成る部分列をそれぞれ整列し,更に間隔を詰めて同様の操作を行い,間隔が1になるまでこれを繰り返す。
イ 中間的な基準値を決めて,それよりも大きな値を集めた区分と,小さな値を集めた区分に要素を振り分ける。次に,それぞれの区分の中で同様の操作を繰り返す。
ウ 隣り合う要素を比較して,大小の順が逆であれば,それらの要素を入れ替えるという操作を繰り返す。
エ 未整列の部分を順序木にし,そこから最小値を取り出して整列済の部分に移す。この操作を繰り返して,未整列の部分を縮めていく。
正解は”ウ”
ア シェルソートの説明です
イ クイックソートの説明です
ウ バブルソートの説明です
エ ヒープソートの説明です