基本選択法


ソート

アルゴリズムと言えば、やはり整列を語らずには始まりません
整列(ソート)とは、配列などのデータを定められた順番に並べ替えるアルゴリズムです

定められた順番は、数字であれば小さい順番とか大きい順番とか
文字列であれば、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ステートメントの比較演算子を逆にします



前のページへ戻る次のページへ