最小値を見つけて先頭に移動、2番目に小さい要素を見つけて2番目に移動 を繰り返していくアルゴリズム
#includevoid swap (int *x, int *y){ int temp; temp = *x; *x = *y; *y = temp; } void select_sort(int array[], int array_size){ int i, j, min_index; for(i = 0; i < array_size -1; i++){ min_index = i; for (j = i + 1; j < array_size; j++){ if(array[j] < array[min_index]) {min_index = j;} } swap(&array[min_index], &array[i]); } } int main(void){ int array[10] = {3, 4, 1, 5, 6, 2, 8, 7, 9, 0}; int i; select_sort(array, 10); for(i = 0; i<10; i++){ printf("%d ", array[i]); } printf("\n"); return 0; }
$ ./main
0 1 2 3 4 5 6 7 8 9
左右の比較ではなくて、先頭との比較 swap(&array[min_index], &array[i])ってところがなるほどなーって思う