C#プログラミングのアルゴリズム講座をしていきます!
慣れないうちは、あまり頭に入ってこなくて楽しくないかもしれませんので、無理せず学んでいきましょう。
第1回目は、アルゴリズムの中では比較的優しい基礎的なソート「バブルソート」について考えていきたいと思います。
メモ
使う言語:C#
エディター:Visual Studio 2019
バブルソートとは
バブルソートとは、隣り合う値で順番が崩れているものを入れ替えることによってソートする手法です。
値が泡のように徐々に上がっていくので「バブル」ソートと呼ばれています。
言葉だけの説明だけではイメージが沸かないと思うので、図で見ていきましょう。

この配列で考えてみましょう。目指すのは左が小さく、右に行くにつれて大きくなる配列です。
それでは、まず左から2つの数字⑤と➀を取って比べます。
この場合、5>1と左側の5の方が1より大きいので両者の順番を入れ替えます。

となります。次に先ほどひっくり返した⑤と➃を比べます。5>4と5の方が大きいのでまた両者をひっくり返します。
同じように⑤を取って次の数字と比べていきます。



このように⑤が泡のように上がっていきます。今のままではソートし切れていないので、また先頭から比べていきます。
➀と➃を比べると1<4と大小関係が成立しているので変更はありません。

次に➃と➁を比較します。左の➃の方が大きいのでひっくり返します

4>3も➃の方が大きいので入れ替えます。

これで順番通りにソートが完了です。

バブルソートのコード
バブルコードの理論が分かったところで、これをコードに落とし込んでいきましょう。
public int[] bubblesort(int[] x){
//配列が空だったら、空の配列を返す。
if( null == x ) return x;
//配列の長さを変数に入れる。
int n = x.Length;
//配列の長さ分ループさせる。
for(int i = n; i > 0; --i){
for(int j = 1; j < i; ++j){
//x[j-1]が比べる数字の左側、x[j]が右の数字
//左の数字が右より大きかったら、Ifの中の処理へ
if( x[j-1] > x[j] ){
//仮に、tに左の数字を代入しておく
int t = x[j-1];
//左の数字の場所に、右の数字を入れる
x[j-1] = x[j];
//右の数字の場所に、仮置きしていた左の数字を入れる
x[j] = t;
}
}
}//loop end
//入れ替えた配列を返す。
return x;
}
次にこのメソッドを実際に使ってみましょう。
// まずサンプルの配列を作成
int[] test = new int[5] { 5, 1, 2, 4, 3 };
// 上記で作成したメソッドを使います。
test = bubblesort(test);
これで、testの配列は[1,2,3,4,5]の順番にソートされました。