選択ソート(直接選択ソート、Selection sort)。
一番小さいのを選んで、先頭へ。次に小さいのを選んで2番目に・・・と並べる。一般的には、同じ要素の並びが変わってしまう不安定ソート。
template<typename TElement, typename TSize>
void SelectionSort(TElement * data, const TSize size)
{
TSize tail = size - 1;
for (TSize head = 0; head < tail; ++head)
{
TElement * pMin = (data + head);
for (TSize pos = head + 1; pos < size; ++pos)
if (data[pos] < *pMin) pMin = (data + pos);
if (data + head != pMin)
{
TElement temp = data[head];
data[head] = *pMin;
*pMin = temp;
}
}
}