😊

代表的なソートアルゴリズムをC#で実装してみる

2023/03/18に公開約2,600字

基本情報の学習のついでに代表的なソートアルゴリズムについてC#実装したのでメモです。

基本選択法(選択ソート)

slection_sort.cs
using System;

/// <summary>
/// 選択ソートによる配列の昇順ソートを行うクラス
/// </summary>
class SelectionSort
{
    static void Main()
    {
        int[] numbers = {5, 2, 1, 8, 4}; // ソートする数値の配列

        // 選択ソートのアルゴリズムを実行する
        for (int i = 0; i < numbers.Length - 1; i++)
        {
            int minIndex = i; // 最小値のインデックスを保存する変数を初期化する
            for (int j = i + 1; j < numbers.Length; j++)
            {
                if (numbers[j] < numbers[minIndex])
                {
                    minIndex = j; // 最小値のインデックスを更新する
                }
            }

            if (i != minIndex)
            {
                // 最小値を先頭要素と交換する
                int temp = numbers[i];
                numbers[i] = numbers[minIndex];
                numbers[minIndex] = temp;
            }
        }

        // ソートした結果を表示する
        Console.WriteLine("ソート結果:");
        foreach (int number in numbers)
        {
            Console.Write(number + " ");
        }
    }
}

基本交換法(バブルソート)

bubble_sort.cs
using System;

/// <summary>
/// バブルソートによる配列の昇順ソートを行うクラス
/// </summary>
class BubbleSort
{
    static void Main()
    {
        int[] numbers = {5, 2, 1, 8, 4}; // ソートする数値の配列

        // バブルソートのアルゴリズムを実行する
        for (int i = 0; i < numbers.Length - 1; i++)
        {
            for (int j = numbers.Length - 1; j > i; j--)
            {
                if (numbers[j] < numbers[j - 1])
                {
                    // 隣り合う要素を交換する
                    int temp = numbers[j];
                    numbers[j] = numbers[j - 1];
                    numbers[j - 1] = temp;
                }
            }
        }

        // ソートした結果を表示する
        Console.WriteLine("ソート結果:");
        foreach (int number in numbers)
        {
            Console.Write(number + " ");
        }
    }
}

基本挿入法(挿入ソート)

insert_sort.cs
using System;

/// <summary>
/// 挿入ソートによる配列の昇順ソートを行うクラス
/// </summary>
class InsertionSort
{
    static void Main()
    {
        int[] numbers = {5, 2, 1, 8, 4}; // ソートする数値の配列

        // 挿入ソートのアルゴリズムを実行する
        for (int i = 1; i < numbers.Length; i++)
        {
            int j = i;
            while (j > 0 && numbers[j] < numbers[j - 1])
            {
                // 隣り合う要素を交換する
                int temp = numbers[j];
                numbers[j] = numbers[j - 1];
                numbers[j - 1] = temp;
                j--;
            }
        }

        // ソートした結果を表示する
        Console.WriteLine("ソート結果:");
        foreach (int number in numbers)
        {
            Console.Write(number + " ");
        }
    }
}

Discussion

ログインするとコメントできます