【C言語】while文を使ってバブルソートを実装する方法

目次から探す

バブルソートのアルゴリズム

バブルソートは、隣り合う要素を比較して順序が逆であれば交換するという操作を繰り返すことで、配列を昇順または降順にソートするアルゴリズムです。

  1. 配列の先頭から順に隣り合う要素を比較します。
  2. 隣り合う要素の順序が逆であれば、それらの要素を交換します。
  3. 1回の操作で一番大きな(または小さな)要素が配列の末尾に移動します。
  4. 配列の先頭から順に上記の操作を繰り返します。
  5. ソートが完了するまで、上記の操作を繰り返します。

バブルソートの実装

バブルソートを実装するためには、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;
}

コードの解説

  1. bubbleSort関数は、配列と要素の数を受け取り、バブルソートを行います。
  2. 変数iはソートの回数を表し、変数jは配列内の要素のインデックスを表します。
  3. 変数tempは要素の交換時に一時的に値を保存するための変数です。
  4. 変数swappedは要素の交換が行われたかどうかを示すフラグです。
  5. forループはソートの回数を表し、whileループは隣り合う要素の比較と交換を行います。
  6. swappedが0のままであれば、ソートが完了しているため、ループを抜けます。
  7. main関数では、ソート前とソート後の配列を表示します。

バブルソートの実行例

以下は、ソート前とソート後の配列の状態を示す実行例です。

ソート前の配列の状態

ソート前の配列: 5 2 8 1 9

ソート後の配列の状態

ソート後の配列: 1 2 5 8 9

※ 上記のコードは、配列の要素を昇順にソートする例です。

降順にソートする場合は、if (arr[j] > arr[j + 1])の条件をif (arr[j] < arr[j + 1])に変更してください。

また、他の配列や要素数を使って実行してみることで、バブルソートの動作を確認してみてください。

目次から探す