fv17の日記

Webエンジニアの備忘用ブログです。主にWeb界隈の技術に関して書いています。

ソートアルゴリズム

挿入ソート

計算量

O(n2)
ほとんど整列済みの数列に対してはほぼO(n)と高速で動作する

概要

  • 前半をソート済み部分、後半を未ソート部分で分ける
  • 未ソート部分の先頭を、ソート済み部分の最後尾から比較して配置
  • 安定している

詳細

258369
緑部分がソート済みの場合、

  • まず、8と3を比較し、8を後ろにずらして、 253869
  • 次に、5と3を比較し、5を後ろにずらして、 235869
  • 最後に、2と3を比較し、3を挿入位置が確定して、235869
  • 235869 となり、次は6をどこに挿入するかを考える

バブルソート

計算量

O(n2)
遅い。一連の処理において、ある条件を満たせば次のループへ、ということがない。

概要

挿入ソートと同様に、前半をソート済み部分、後半を未ソート部分で分ける
ソート済み部分の最後尾から順々に比較し、大小逆転していれば交換する
安定している

詳細

12534
緑部分がソート済みの場合、

  • まず、4と3を比較し、12534でそのまま
  • 次に、3と5を比較し、12354
  • 再度、一番最後尾から比較、12345

選択ソート

計算量

O(n2)
遅い。

概要

例によって、前半をソート済み部分、後半を未ソート部分で分ける
未ソート部分から最小の要素を特定し、それを未ソート部分の先頭と交換する
安定なソートではない

詳細

1387945
緑部分がソート済みの場合、

  • まず、最小となる4を探す
  • 次に、4と8を交換し、1347985
  • 上記の処理を繰り返す