単純選択法とは、並び替えが行われていない部分から最小値、または最大値をひとつ選び出し、ソート済みデータの最後と交換する方法です。
また、単純選択法は、安定したソートアルゴリズムではありません。この点は気をつける必要があります。
- 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)){
のように、判定条件を変更すると降順になります。今回のサンプルソースは昇順です。