単純選択法とは、並び替えが行われていない部分から最小値、または最大値をひとつ選び出し、ソート済みデータの最後と交換する方法です。
また、単純選択法は、安定したソートアルゴリズムではありません。この点は気をつける必要があります。
 
- a[0]〜a[N-1]間の最小値または最大値を選び出し、a[0]と交換する。これでa[0]が決定。
 
- a[1]〜a[N-1]間の最小値または最大値を選び出し、a[1]と交換する。これでa[1]が決定。
 
- これをN-1回繰り返す。(Nはソートする値の個数)
 
*ptrはint型変数の配列への先頭ポインタ、nはデータの個数です。
void selection_sort(int *ptr, int n)
{
    int i, j, k;
    for(i=0; i<n-1; i++){
        k = i;
        for(j=i+1; j<n; j++){
            if(*(ptr+k) > *(ptr+j)){
                k = j;
            }
        }
        swap((ptr+i), (ptr+k));
    }
}
void swap(int *ptr1, int *ptr2)
{
    int w;
    w     = *ptr1;
    *ptr1 = *ptr2;
    *ptr2 = w;
}
また
if(*(ptr+k) > *(ptr+j)){
を
if(*(ptr+k) < *(ptr+j)){
のように、判定条件を変更すると降順になります。今回のサンプルソースは昇順です。