単純選択ソートとは
単純選択ソートのアルゴリズムについて解説します。
まず、一番端の要素と、残りの要素の中で最も小さい(降順なら大きい)値を持つ要素を入れ替えます。
次に二番目の要素、その次は三番目の要素…といったように順番に小さいものを探しだし並べ替えていきます。
以下の配列を例に挙げ、実際にみていきましょう。
添え字 | [0] | [1] | [2] | [3] | [4] |
値 | 4 | 2 | 9 | 6 | 0 |
まずは0番の要素と残りの中で一番小さい要素を交換します。
添え字 | [0] | [1] | [2] | [3] | [4] |
値 | 0 | 2 | 9 | 6 | 4 |
0番目の要素である4と残りの中で最も小さい0が交換されます。
添え字 | [0] | [1] | [2] | [3] | [4] |
値 | 0 | 2 | 9 | 6 | 4 |
残りの要素の中で最も小さい2は1番目なので交換の必要はありません。
以下同様に並べ替えていきます。
添え字 | [0] | [1] | [2] | [3] | [4] |
値 | 0 | 2 | 4 | 6 | 9 |
添え字 | [0] | [1] | [2] | [3] | [4] |
値 | 0 | 2 | 4 | 6 | 9 |
これでソートは完了です。
バブルソートに比べ、交換回数が少ないので高速です。
ソースコード
以下がソースコードです。
#include <stdio.h> int main(void) { int arr[] = { 5, 2, 6, 1, 3, 9 , 3, 7, 4, 0}; int arr_len = 10; //配列の長さ int i, j, temp; int min; for (i = 0; i < arr_len; i++) { min = i; for (j = i + 1; j < arr_len; j++) { if (arr[min] > arr[j]) min = j; } temp = arr[i]; arr[i] = arr[min]; arr[min] = temp; } return 0; }
このサイトに掲載しているソースコードの多くはmain()関数のみで記述しているので、関数化して他のプログラムでも使えるようにすると良いでしょう。関数を参考にしてください。
その他のソートの方法についてはこちら。