目次から探す
バブルソートのアルゴリズム
バブルソートは、隣り合う要素を比較して順序が逆であれば交換するという操作を繰り返すことで、配列を昇順または降順にソートするアルゴリズムです。
- 配列の先頭から順に隣り合う要素を比較します。
- 隣り合う要素の順序が逆であれば、それらの要素を交換します。
- 1回の操作で一番大きな(または小さな)要素が配列の末尾に移動します。
- 配列の先頭から順に上記の操作を繰り返します。
- ソートが完了するまで、上記の操作を繰り返します。
バブルソートの実装
バブルソートを実装するためには、while文
を使って隣り合う要素の比較と交換を繰り返すことができます。
while文を使ったバブルソートの実装方法
以下のコードは、while文
を使ってバブルソートを実装した例です。
#include <stdio.h>
void bubbleSort(int arr[], int n) {
int i, j;
int temp;
int swapped;
for (i = 0; i < n - 1; i++) {
swapped = 0;
j = 0;
while (j < n - i - 1) {
if (arr[j] > arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
swapped = 1;
}
j++;
}
if (swapped == 0) {
break;
}
}
}
int main() {
int arr[] = {5, 2, 8, 1, 9};
int n = sizeof(arr) / sizeof(arr[0]);
int i;
printf("ソート前の配列: ");
for (i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
bubbleSort(arr, n);
printf("\nソート後の配列: ");
for (i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
return 0;
}
コードの解説
bubbleSort関数
は、配列と要素の数を受け取り、バブルソートを行います。変数i
はソートの回数を表し、変数j
は配列内の要素のインデックスを表します。変数temp
は要素の交換時に一時的に値を保存するための変数です。変数swapped
は要素の交換が行われたかどうかを示すフラグです。for
ループはソートの回数を表し、while
ループは隣り合う要素の比較と交換を行います。swapped
が0のままであれば、ソートが完了しているため、ループを抜けます。main関数
では、ソート前とソート後の配列を表示します。
バブルソートの実行例
以下は、ソート前とソート後の配列の状態を示す実行例です。
ソート前の配列の状態
ソート前の配列: 5 2 8 1 9
ソート後の配列の状態
ソート後の配列: 1 2 5 8 9
※ 上記のコードは、配列の要素を昇順にソートする例です。
降順にソートする場合は、if (arr[j] > arr[j + 1])
の条件をif (arr[j] < arr[j + 1])
に変更してください。
また、他の配列や要素数を使って実行してみることで、バブルソートの動作を確認してみてください。