選択ソート
アルゴリズム
データ列中で一番小さい値を探し、1番目の要素と交換する。次に、2番目以降のデータ列から一番小さい値を探し、2番目の要素と交換する。これを、データ列の最後まで繰り返す（厳密には、データ列の最後より1つ手前までの繰り返しでよい。一つ前まで交換済みであれば、最後（残り）は必ず最大値になるからである）。大小が入れ替わる降順の場合も同様の手法である。
実装例
for I := 1 to N
  min := I
  for J := I+1 to N  
    if data[J] < data[min] then
      min := J
    end if
  end for
  swap(data[I], data[min])
end for
C#での実装例
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SelectionSort
{
    class Program
    {
        static void Main(string[] args)
        {
            int temp;
            Console.WriteLine("選択ソート実装例");
            Console.Write("ソートしたいデータ数を入力ください :  ");
            int dataNumber = Convert.ToInt32(Console.ReadLine());
            int[] Array = new int[dataNumber];
            Console.WriteLine("\n");

            for (int i = 0; i < dataNumber; i++)
            {
                Console.Write("[" + (i + 1) + "]番目のデータを入力してください :  ");
                Array[i] = Convert.ToInt32(Console.ReadLine());
            }
            Console.WriteLine("\n");
            foreach (int a in Array)
                Console.Write(a + " ");

            for(int i = 0; i < Array.Length; i++)
            {
            
                for(int j = i + 1; j < Array.Length; j++)
                {
                    if(Array[j] < Array[i])
                    {
                        temp = Array[i];
                        Array[i] = Array[j];
                        Array[j] = temp;
                    }
                }
            }
            Console.WriteLine("\n");
            Console.WriteLine("ソートされた結果 : ");
            foreach (int n in Array)
                Console.Write(n + " ");
            Console.ReadKey();
        }
    }
}
計算時間
「比較回数」は、n(n-1)/2回。「交換回数」は、各ループで最大1回なので、全体では多くともn-1回。バブルソートと比較すると、「比較回数」は同じだが「交換回数」が少ないので、選択ソートの方が高速である。