ソートリズムの種類は全部で6種類になります。
バブルソート
バブルソートとは、隣同士の値を比較、必要があれば入れ替え、を繰り返して整列させる方法です。例えば、(1,4,3,2)という配列をバブルソートで並び替えてみます。
(1,4)を比較し、正しい配列なのでそのまま (1,4,3,2)
(4,3)を比較し、入れ替え (1,4,3,2) → (1,3,4,2)
(4,2)を比較し、入れ替え (1,3,4,2) → (1,3,2,4)
4を一番大きい数と見なし、4とそれ以外を分ける (1,3,2)、(4)
(1,3,2)で同様のことを繰り返す
以上がバブルソートによる整列方法です。
バブルソートにおける計算回数は、O(n^2)となります。
クイックソート
クイックソートとは、基準値を設けて、基準値より大きいブロックと小さいブロックに分けて並び替えるという処理を繰り返すことで整列させる方法です。例えば、(3,5,9,8,1,7,2,4,6)という配列をクイックソートを使い並び替えてみます。基準値を末尾の6とすると下記のようになります。
6より大きい、小さいブロックに分割される (3,5,1,2,4), 6, (9,8,7)
小さいブロック、大きいブロックそれぞれで同じことを繰り返す (3,1,2), 4,5,6,7,(9,8)
これを繰り返していきます (1,2,3,4,5,6,7,8,9)
クイックソートは、外部のメモリ領域を使用せず完結するため、スピードが速い特徴があります。
計算回数は、O(n log n)と表すことができます。
マージソート
マージソートとは、対象のデータを分割し、分割後の小さいブロック内で整列、再度統合することで全てを整列させる方法です。例えば、(3,5,9,8,1,7,2,10,4,6)という配列でマージソートを使うと、下記の通りになります。
最小まで分割する ((3), (5),(9),(8),(1),(7),(2),(10),(4),(6))
並び替えをしながら統合します ((3,5), (8,9),(1,7),(2,10),(4,6))
更に並び替えをしながら統合を繰り返します((3,5,8,9),(1,2,7,10),(4,6))
(1,2,3,5,7,8,9,10),(4,6)
(1,2,3,4,5,6,7,8,9,10)
マージソートは、外部メモリを利用する方法で、計算回数は、O(n log n)で表せます。
選択ソート
選択ソートとは、データ内の最小値(最大値)の値を見つけて、左から順番に並び替えるという方法です。例えば、(3,4,1,2)という配列で選択ソートを使うと下記の通りです。
最小の数値と1番目の要素を入れ替えます (3,4,1,2) → (1,4,3,2)
1番目は最小値で確定し、2番目以降で同じ作業を繰り返します (1,4,3,2) → (1,2,3,4)
3番目以降、4番目以降と繰り返していきます
計算回数は、o(n^2)とバブルソートと同じですが、交換回数が少ないため、バブルソートよりも高速という特徴があります。
挿入ソート
挿入ソートとは、左から順番に要素を比較しながら入れ替えていく方法です。例えば、(4,3,1,2,5)という配列で挿入ソートを使い並び替えると下記の通りです。
左の2つを比較して並び替える (3,4,1,2,5)
左の2つと3つ目を比較して並び替える (1,3,4,2,5)
左の3つと4つ目を比較して並び替える (1,2,3,4,5)
必要な分だけ繰り返す
計算回数は、最大でn(n-1)/2となります。
ヒープソート
ヒープソートとは、ヒープ構造という二分木の一種を構築して並べ替えをおこなう方法です。例えば、(4,3,1,2,5)という配列でヒープソートを使い並び替えると下記の通りです。
親ノードがいずれのこの子ノードよりも大きくなるように調整しながら、データを一つずつ二分木に登録する
子ノードの中で一番小さいデータを取り出して、配列の先頭に並べる
残ったノードで一番小さいデータを取り出して、次に並べる
これを繰り返す
計算回数は、O(n log n)となり、高速処理であることが特徴の方法です。