基本交換法
バブルソート
基本選択法では、必ず全ての過程を処理する必要がありました
これは、大量のデータを扱う場合は非常に効率が悪いです
基本交換法は、配列の初期状態で処理回数が変化する整列アルゴリズムです
全ての値の順序が異なっていれば基本選択法と同じ処理回数になります
この基本交換法をバブルソートと一般的に呼びます
バブルソートの概念は、隣り合うデータを比較して順序を入れ換えます
これを、入れ換えがなくなるまで繰り返すことで、配列をソートします
最初の時点で配列がソートされている場合は、そのまま処理を終了します
たとえば、値が小さい順にソートする場合
if (x[0] > x[1] ) 入れ換え
if (x[1] > x[2] ) 入れ換え...
これを配列の最終要素まで繰り返し、入れ換えがあれば
再び配列の先頭から比較します
この作業を、入れ換えがなくなるまで繰り返します
int* bubleSort(int *ary , int last_index) {
int count , tmp;
char check;
last_index--;
do {
check = 0;
for (count = 0 ; count < last_index ; count++) {
if (*(ary + count) > *(ary + (count + 1))) {
tmp = *(ary + count);
*(ary + count) = *(ary + (count + 1));
*(ary + (count + 1)) = tmp;
check = 1;
}
}
last_index--;
} while (check == 1 && last_index > 0);
return ary;
}
この関数は、第一引数にソートする配列を
第二引数に配列の最大要素数を指定する
入れ換えが発生すると、必ずもっとも大きい値が一番右(最大要素)にくる
そのため、ループするごとにソートする最大要素をデクリメントすることで、処理回数を減らしている