😊
代表的なソートアルゴリズムをC#で実装してみる
基本情報の学習のついでに代表的なソートアルゴリズムについて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