C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#で選択ソートを実装する方法|初心者向けにコード例と解説

選択ソート(Selection Sort)とは?

選択ソートは、ループを1回まわるごとに配列の中から最小値を探し出し、その最小値と現在の要素を入れ替えることで並べ替えを行うソートアルゴリズムです。この手順を配列が整列されるまで繰り返します。

計算量は O(n²) と決して高速ではありませんが、アルゴリズムがシンプルで理解しやすいため、ソート処理の学習には最適な題材です。

ここでは、C#で選択ソートを実装したプログラムを紹介し、その仕組みを順を追って解説していきます。

C#による選択ソートのサンプルコード

using System;
public class Example {
    static void Main(string[] args) {
        int[] arr = new int[10] { 56, 1, 99, 67, 89, 23, 44, 12, 78, 34 };
        int n = 10;
        Console.WriteLine("Selection sort");
        Console.Write("Initial array is: ");
        for (int i = 0; i < n; i++) {
            Console.Write(arr[i] + " ");
        }
        int temp, smallest;
        for (int i = 0; i < n - 1; i++) {
            smallest = i;
            for (int j = i + 1; j < n; j++) {
                if (arr[j] < arr[smallest]) {
                    smallest = j;
                }
            }
            temp = arr[smallest];
            arr[smallest] = arr[i];
            arr[i] = temp;
        }
        Console.WriteLine();
        Console.Write("Sorted array is: ");
        for (int i = 0; i < n; i++) {
            Console.Write(arr[i] + " ");
        }
    }
}

実行結果

上記のプログラムを実行すると、次のような結果が出力されます。

Selection sort
Initial array is: 56 1 99 67 89 23 44 12 78 34
Sorted array is: 1 12 23 34 44 56 67 78 89 99

それでは、このプログラムの内容を詳しく見ていきましょう。

① 配列の初期化と初期状態の表示

まず、ソート対象となる整数型の配列を初期化し、forループを使ってその値をコンソールに出力しています。該当するコードは以下の部分です。

int[] arr = new int[10] { 56, 1, 99, 67, 89, 23, 44, 12, 78, 34 };
int n = 10;
Console.WriteLine("Selection sort");
Console.Write("Initial array is: ");
for (int i = 0; i < n; i++) {
    Console.Write(arr[i] + " ");
}

変数 n には配列の要素数(10)を格納しており、以降のループ処理で範囲の指定に使います。

② ネストされたforループによるソート処理

実際の並べ替えは、二重(ネスト)構造のforループによって行われます。外側のループが1回まわるたびに、未ソート部分から最小値を探し、現在位置の要素と入れ替えます。

for (int i = 0; i < n - 1; i++) {
    smallest = i;
    for (int j = i + 1; j < n; j++) {
        if (arr[j] < arr[smallest]) {
            smallest = j;
        }
    }
    temp = arr[smallest];
    arr[smallest] = arr[i];
    arr[i] = temp;
}

処理の流れを整理すると以下の通りです。

  • 外側のループ変数 i は、現在ソート対象となっている要素の位置を表します。
  • 内側のループ変数 j は、i の次の要素から配列の末尾までを走査し、より小さい値が見つかるたびに最小値のインデックス smallest を更新します。
  • 内側のループが終わった時点で smallest が指すのは未ソート部分の最小値です。これを i 番目の要素と交換(スワップ)します。
  • 外側のループが最後まで完了すれば、配列全体が昇順に整列されます。

③ ソート結果の表示

最後に、整列が完了した配列をコンソールに出力して表示します。該当するコードは以下の部分です。

Console.Write("Sorted array is: ");
for (int i = 0; i < n; i++) {
    Console.Write(arr[i] + " ");
}

まとめ

選択ソートは「最小値を探す → 先頭側と交換する」という単純な操作を繰り返す直感的なアルゴリズムです。実行時間はデータ量の増加に対して O(n²) で増えるため大規模データには不向きですが、仕組みを理解しやすいことから、ソートアルゴリズム入門として多くの場面で取り上げられています。ぜひ実際にコードを動かしながら、その挙動を確認してみてください。

  1. Pythonで学ぶ選択ソートの基本原理と実装方法をわかりやすく解説

    本記事では、選択ソート(Selection Sort)の基本的な仕組みと、Python 3.xでの実装方法について詳しく解説します。 選択ソートとは? 選択ソートは、ソートされていない部分から最小値の要素を繰り返し見つけ出し、それを先頭に移動させることで配列全体を整列していくアルゴリズムです。処理の過程では、与えられた配列が次の2つの部分配列に分けられます。 すでにソートが完了している部分配列 まだソートされていない部分配列 選択ソートの各イテレーション(反復処理)では、未ソート部分から最小要素を取り出し、ソート済み部分の末尾に挿入していきます。この操作を繰り返すことで、最終的に配列全体

  2. Pythonで選択ソートを実装する方法|仕組みとサンプルコードをわかりやすく解説

    この記事では、選択ソート(Selection Sort)の基本的な仕組みと、Python 3.x(およびそれ以前のバージョン)での実装方法について解説します。 選択ソートとは 選択ソートは、ソートされていない部分から最小の要素を繰り返し見つけ出し、先頭側へ移動させることで配列全体を整列していくアルゴリズムです。処理の過程で、対象の配列は次の2つの部分配列に分けられます。 すでにソートが完了している部分配列 まだソートされていない部分配列 選択ソートの各イテレーションでは、未ソートの部分配列から最小要素を取り出し、ソート済みの部分配列の末尾に追加していきます。 アルゴリズムの動作イメー