概要
選択ソート(selection sort)は、 以下のような手順でソートを行うアルゴリズムです。 「安定」な「内部」ソート。
-
配列の中で最小の要素を探して、先頭の要素と交換する。
-
未整列の部分に対して、1の処理を繰り返す。
比較の回数は「バブルソート」と同様に多い部類に入りますが、 要素の交換の回数は常に一定して少ないという特徴があります。 そのため、「比較は簡単だけど、要素の交換は遅い」と言うようなデータ構造に対しては比較的高速になります。
サンプルソース
https://github.com/ufcpp/UfcppSample/blob/master/Chapters/Algorithm/Sort/SelectSort.cs
/// <summary>
/// 選択ソート。
/// </summary>
/// <param name="a">対象の配列</param>
public static void SelectSort<T>(T[] a)
where T : IComparable<T>
{
int n = a.Length;
for (int i = 0; i < n; i++)
{
int min = i;
for (int j = i + 1; j < n; j++)
if (a[min].CompareTo(a[j]) > 0)
min = j;
Swap(ref a[i], ref a[min]);
}