
_START_ARTICLE_
選択ソート
_START_SECTION_
アルゴリズム
_START_PARAGRAPH_
データ列中で一番小さい値を探し、1番目の要素と交換する。次に、2番目以降のデータ列から一番小さい値を探し、2番目の要素と交換する。これを、データ列の最後まで繰り返す（厳密には、データ列の最後より1つ手前までの繰り返しでよい。一つ前まで交換済みであれば、最後（残り）は必ず最大値になるからである）。大小が入れ替わる降順の場合も同様の手法である。
_START_SECTION_
実装例
_START_PARAGRAPH_
for I := 1 to N_NEWLINE_  min := I_NEWLINE_  for J := I+1 to N  _NEWLINE_    if data[J] < data[min] then_NEWLINE_      min := J_NEWLINE_    end if_NEWLINE_  end for_NEWLINE_  swap(data[I], data[min])_NEWLINE_end for
_START_SECTION_
C#での実装例
_START_PARAGRAPH_
using System;_NEWLINE_using System.Collections.Generic;_NEWLINE_using System.Linq;_NEWLINE_using System.Text;_NEWLINE_using System.Threading.Tasks;_NEWLINE__NEWLINE_namespace SelectionSort_NEWLINE_{_NEWLINE_    class Program_NEWLINE_    {_NEWLINE_        static void Main(string[] args)_NEWLINE_        {_NEWLINE_            int temp;_NEWLINE_            Console.WriteLine("選択ソート実装例");_NEWLINE_            Console.Write("ソートしたいデータ数を入力ください :  ");_NEWLINE_            int dataNumber = Convert.ToInt32(Console.ReadLine());_NEWLINE_            int[] Array = new int[dataNumber];_NEWLINE_            Console.WriteLine("\n");_NEWLINE__NEWLINE_            for (int i = 0; i < dataNumber; i++)_NEWLINE_            {_NEWLINE_                Console.Write("[" + (i + 1) + "]番目のデータを入力してください :  ");_NEWLINE_                Array[i] = Convert.ToInt32(Console.ReadLine());_NEWLINE_            }_NEWLINE_            Console.WriteLine("\n");_NEWLINE_            foreach (int a in Array)_NEWLINE_                Console.Write(a + " ");_NEWLINE__NEWLINE_            for(int i = 0; i < Array.Length; i++)_NEWLINE_            {_NEWLINE_            _NEWLINE_                for(int j = i + 1; j < Array.Length; j++)_NEWLINE_                {_NEWLINE_                    if(Array[j] < Array[i])_NEWLINE_                    {_NEWLINE_                        temp = Array[i];_NEWLINE_                        Array[i] = Array[j];_NEWLINE_                        Array[j] = temp;_NEWLINE_                    }_NEWLINE_                }_NEWLINE_            }_NEWLINE_            Console.WriteLine("\n");_NEWLINE_            Console.WriteLine("ソートされた結果 : ");_NEWLINE_            foreach (int n in Array)_NEWLINE_                Console.Write(n + " ");_NEWLINE_            Console.ReadKey();_NEWLINE_        }_NEWLINE_    }_NEWLINE_}
_START_SECTION_
計算時間
_START_PARAGRAPH_
「比較回数」は、n(n-1)/2回。「交換回数」は、各ループで最大1回なので、全体では多くともn-1回。バブルソートと比較すると、「比較回数」は同じだが「交換回数」が少ないので、選択ソートの方が高速である。