C#でマージソートをする方法

以下はC#でのマージソートのコード例です。

public class MergeSort
{
    public static void Main(string[] args)
    {
        int[] array = { 64, 25, 12, 22, 11 };
        Console.WriteLine("Array before sorting:");
        PrintArray(array);
        MergeSortAlgorithm(array, 0, array.Length - 1);
        Console.WriteLine("Array after sorting:");
        PrintArray(array);
    }

    public static void MergeSortAlgorithm(int[] arr, int left, int right)
    {
        if (left < right)
        {
            int middle = (left + right) / 2;

            // Sort first and second halves recursively
            MergeSortAlgorithm(arr, left, middle);
            MergeSortAlgorithm(arr, middle + 1, right);

            // Merge the sorted halves
            Merge(arr, left, middle, right);
        }
    }

    public static void Merge(int[] arr, int left, int middle, int right)
    {
        int n1 = middle - left + 1;
        int n2 = right - middle;

        // Create temporary arrays
        int[] leftArray = new int[n1];
        int[] rightArray = new int[n2];

        // Copy data to temporary arrays
        for (int i = 0; i < n1; ++i)
        {
            leftArray[i] = arr[left + i];
        }
        for (int j = 0; j < n2; ++j)
        {
            rightArray[j] = arr[middle + 1 + j];
        }

        // Merge the temporary arrays
        int leftIndex = 0;
        int rightIndex = 0;
        int mergedIndex = left;

        while (leftIndex < n1 && rightIndex < n2)
        {
            if (leftArray[leftIndex] <= rightArray[rightIndex])
            {
                arr[mergedIndex] = leftArray[leftIndex];
                leftIndex++;
            }
            else
            {
                arr[mergedIndex] = rightArray[rightIndex];
                rightIndex++;
            }
            mergedIndex++;
        }

        // Copy remaining elements of leftArray if any
        while (leftIndex < n1)
        {
            arr[mergedIndex] = leftArray[leftIndex];
            leftIndex++;
            mergedIndex++;
        }

        // Copy remaining elements of rightArray if any
        while (rightIndex < n2)
        {
            arr[mergedIndex] = rightArray[rightIndex];
            rightIndex++;
            mergedIndex++;
        }
    }

    public static void PrintArray(int[] arr)
    {
        int n = arr.Length;
        for (int i = 0; i < n; ++i)
        {
            Console.Write(arr[i] + " ");
        }
        Console.WriteLine();
    }
}

このコードでは、整数型の配列をマージソートでソートする例を示しています。メインメソッドで配列を定義し、ソート前後の状態を表示します。マージソートアルゴリズムはMergeSortAlgorithmメソッド内に実装されており、与えられた配列を再帰的に分割し、最終的にマージしてソートします。Mergeメソッドは、2つのソート済み部分配列をマージするために使用されます。PrintArrayメソッドは配列を表示するために使用されます。

上記のコードを実行すると、マージソートによって配列がソートされ、ソート前後の結果が表示されます。

その他のアルゴリズム

プログラミングにおけるソートアルゴリズムには、さまざまな種類があります。この記事では、代表的なソートアルゴリズムを紹介します。 バブルソ...

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

ブランドイメージを構築するための効果的な配色戦略

ブランドイメージを構築するための効果的な配色戦略

プログラマーの年収と年収アップの方法

プログラマーの年収と年収アップの方法

C#でクイックソートをする方法

C#でクイックソートをする方法

英語を上達させるための効果的な方法

英語を上達させるための効果的な方法

デザイナーが覚えておきたい英単語100選(簡易説明付き)

デザイナーが覚えておきたい英単語100選(簡易説明付き)

プログラミングの上達方法:効果的な学習とスキル向上のためのヒント

プログラミングの上達方法:効果的な学習とスキル向上のためのヒント

デザイナーの年収と年収アップの方法

デザイナーの年収と年収アップの方法

C#で文字コードを指定してテキストファイルに書き込む方法

C#で文字コードを指定してテキストファイルに書き込む方法