単純選択ソートとは
単純選択ソートのアルゴリズムについて解説します。
まず、一番端の要素と、残りの要素の中で最も小さい(降順なら大きい)値を持つ要素を入れ替えます。
次に二番目の要素、その次は三番目の要素…といったように順番に小さいものを探しだし並べ替えていきます。
以下の配列を例に挙げ、実際にみていきましょう。
| 添え字 | [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 |
これでソートは完了です。
バブルソートに比べ、交換回数が少ないので高速です。
https://tunasalmon.com/2017/01/01/%e3%83%90%e3%83%96%e3%83%ab%e3%82%bd%e3%83%bc%e3%83%88/
ソースコード
以下がソースコードです。
#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[j])
min = j;
}
temp = arr[i];
arr[i] = arr[min];
arr[min] = temp;
}
return 0;
}
このサイトに掲載しているソースコードの多くはmain()関数のみで記述しているので、関数化して他のプログラムでも使えるようにすると良いでしょう。関数を参考にしてください。
https://tunasalmon.com/2016/07/18/%E9%96%A2%E6%95%B0/
その他のソートの方法についてはこちら。
https://tunasalmon.com/2017/08/30/%E3%82%BD%E3%83%BC%E3%83%88/
(adsbygoogle = window.adsbygoogle || []).push({});

