C#で学ぶバブルソート:アルゴリズムの仕組みと実装コードをわかりやすく解説
バブルソート(Bubble Sort)は、最も基本的なソートアルゴリズムの一つです。隣り合う要素同士を順番に比較し、順序が正しくなければ入れ替えるという操作を繰り返すことで、配列全体を整列させます。比較ベースのシンプルな手法であり、初心者がソートの考え方を理解するのに最適なアルゴリズムです。
バブルソートの動作イメージ
ここでは、次の5つの要素を持つint型配列を例に、バブルソートの手順を見ていきましょう。
int[] arr = { 78, 55, 45, 98, 13 };1回目のパス(反復処理)
まず、先頭の2つの要素「78」と「55」を比較します。55は78より小さいため、両者を入れ替えます。この時点での配列は以下の通りです。
55, 78, 45, 98, 13
次に「78」と「45」を比較します。45の方が小さいので、入れ替えます。
55, 45, 78, 98, 13
続いて「78」と「98」を比較します。今度は78の方が小さいため、そのまま維持します。
さらに「98」と「13」を比較すると、13の方が小さいので入れ替えます。この時点で配列は次のようになります。
55, 45, 78, 13, 98
これで1回目のパスが完了しました。このように、大きな値が徐々に配列の末尾へと移動していく様子が、泡(バブル)が水面に浮かび上がる様子に似ていることから、「バブルソート」と呼ばれています。
すべてのパスを完了すると、最終的に次のように昇順に並べ替えられた配列が得られます。
13, 45, 55, 78, 98
C#によるバブルソートの実装例
それでは、実際にC#でバブルソートを実装してみましょう。以下のコードでは、二重のforループを使って隣接する要素を比較・交換しています。
using System;
namespace BubbleSort {
class MySort {
static void Main(string[] args) {
int[] arr = { 78, 55, 45, 98, 13 };
int temp;
for (int j = 0; j <= arr.Length - 2; j++) {
for (int i = 0; i <= arr.Length - 2; i++) {
if (arr[i] > arr[i + 1]) {
temp = arr[i + 1];
arr[i + 1] = arr[i];
arr[i] = temp;
}
}
}
Console.WriteLine("Sorted:");
foreach (int p in arr)
Console.Write(p + " ");
Console.Read();
}
}
}コードのポイント
- 外側のループ:パス(反復)の回数を制御します。要素数がnの場合、最大n-1回のパスが必要です。
- 内側のループ:隣接する要素arr[i]とarr[i+1]を比較し、順序が逆なら一時変数tempを使って入れ替えます。
- foreach文:ソート後の配列の全要素をコンソールに出力します。
実行結果
上記のプログラムを実行すると、コンソールには次のようにソート済みの配列が出力されます。
Sorted: 13 45 55 78 98
まとめ
バブルソートは実装が非常に簡単である反面、計算量はO(n²)となり、大規模なデータには不向きです。しかし、アルゴリズムの基礎を理解するための教材として非常に優れており、クイックソートやマージソートなど、より高度なソートアルゴリズムを学ぶ前の第一歩としてぜひ押さえておきましょう。
-
Pythonで学ぶ選択ソートの基本原理と実装方法をわかりやすく解説
本記事では、選択ソート(Selection Sort)の基本的な仕組みと、Python 3.xでの実装方法について詳しく解説します。 選択ソートとは? 選択ソートは、ソートされていない部分から最小値の要素を繰り返し見つけ出し、それを先頭に移動させることで配列全体を整列していくアルゴリズムです。処理の過程では、与えられた配列が次の2つの部分配列に分けられます。 すでにソートが完了している部分配列 まだソートされていない部分配列 選択ソートの各イテレーション(反復処理)では、未ソート部分から最小要素を取り出し、ソート済み部分の末尾に挿入していきます。この操作を繰り返すことで、最終的に配列全体
-
Pythonでバブルソートを実装する方法をわかりやすく解説
この記事では、代表的なソートアルゴリズムの一つである「バブルソート(Bubble Sort)」をPythonで実装する方法について詳しく解説します。 下図は、このアルゴリズムがどのように動作するかを示したものです。 アルゴリズムの手順 先頭の要素(インデックス = 0)から開始し、現在の要素と配列内の次の要素を比較します。 現在の要素が次の要素より大きい場合、両者を入れ替えます。 現在の要素が次の要素より小さい場合は、そのまま次の要素へ移動します。 この手順を、配列全体がソートされるまで繰り返します。 それでは、実際の実装を見てみましょう。 サンプルコード def bubbleSort(