
以下は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
メソッドは配列を表示するために使用されます。
上記のコードを実行すると、マージソートによって配列がソートされ、ソート前後の結果が表示されます。
その他のアルゴリズム
