Javaの選択ソートとバブルソートの特徴
Java の選択ソートとバブルソートは、共通した特徴をもつ、 2 つのよく知られたソートアルゴリズムです。
選択ソートの特徴
- 各回のループでは未ソート部分の最小(または最大)要素を見つけて未ソート部分の最初の要素と入れ替える。
- 交換操作は 1 サイクルごとに 1 回のみ必要となるため、相対的に交換回数が少ない。
- n個の要素の配列をソートする場合は、n(n-1)/2回の比較とn-1回の交換操作が必要で、計算量はO(n^2)である。
- 選択ソートは不安定なソートアルゴリズムであり、つまり同じ要素が複数ある場合に、それらの相対的な順序が変更される可能性があるということです。
バブルソートの特徴
- 隣接する要素の比較・交換を行い、最大の(または、最小の)要素を徐々に配列の末尾に「泡」立たせていく。
- 各イテレーションで、1つの最大(最小)要素を未ソート部分から正しい場所に配置します。
- バブルソートは、最適な場合(すでにソートされている場合)にはO(n)の時間計算量で動作しますが、平均および最悪の場合はO(n^2)です。
- バブルソートでは、同じ要素の相対的な順序は維持され、安定なソートアルゴリズムになります。
要約すると、選択ソートとバブルソートの大きな違いは性能と安定性です。選択ソートは交換回数が比較的少なくなりますが、時間計算量は高く不安定です。バブルソートは交換回数が多くなりますが、時間計算量が低く安定しています。実際に使う場合には、性能を重視する場合は選択ソート、安定性を重視する場合はバブルソートを選択するのがよいでしょう。