基本選択法
ソート
アルゴリズムと言えば、やはり整列を語らずには始まりません
整列(ソート)とは、配列などのデータを定められた順番に並べ替えるアルゴリズムです
定められた順番は、数字であれば小さい順番とか大きい順番とか
文字列であれば、Aが先頭でZが後ろといった順番になります
ここでは、整列のなかでももっとも基本的な基本選択法(マックスソート)を扱います
整列において、もっとも基本的な概念を学習しましょう
基本選択法は、アルゴリズムは非常に簡単なのですが
効率は非常に悪いアルゴリズムです
このアルゴリズムは、最初から正しい順番に並んでいたとしても
全てのステップを踏んでしまうため、大量のデータをソートする場合は異なるアルゴリズムにする必要があります
基本選択法は、ループをネストする形で行われます
最初のループは、調べる配列の添え字をあらわすカウンターで
次のループは、現在の添え字とそれ以降の添え字を比較するループです
比較のとき、もし現在の値以降の値で順序が異なっている場合、それを入れ換えます
if (ary[x] > ary[x + n]) {
tmp = ary[x];
ary[x] = ary[x + n];
ary[x + n] = tmp;
これを、x+nが要素の最後にたどり着くまで繰り返し
とくに、現在の値以降の要素で、現在の値より順の異なる値がない場合
第2ループを抜け出して、最初のループのカウンター(この場合x)をインクリメントします
int* maxSort(int *ary , int last_index) {
int i , j , tmp;
for (i = 0 ; i < last_index - 1 ; i++) {
for (j = i + 1 ; j < last_index ; j++) {
if (*(ary + i) > *(ary + j)) {
tmp = *(ary + i);
*(ary + i) = *(ary + j);
*(ary + j) = tmp;
}
}
}
return ary;
}
第一引数にソートする配列のポインタを、第二引数にソートする最大要素を指定します
戻り値は、ソートした配列のポインタを返します
この関数は、与えられた配列を小さい順にソートしますが
大きい値を先頭に並べたい場合は、ifステートメントの比較演算子を逆にします