C言語のきほん「バブルソート」

スポンサーリンク
Cプログラミング C言語

今回は、バブルソートのアルゴリズムを利用したプログラムをご紹介しよう。

任意に入力した学生の身長を読み込んで、昇順にソートするプログラムである。

なお、本プログラムは、Windows 11 Home(23H2)上で、 Visual Studio Code(1.87.2)を使用して作成し、gcc (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0 でコンパイルしている。

C言語のインストールについてはこちらをご参照ください。↓

学生の身長を読み込んでソートするプログラム

//学生の身長を読み込んでソートするプログラム

#include <stdio.h>

#define NUMBER 5    //人数

//バブルソート
void bsort(int a[],int n)
{
    for (int i = n; i > 0; i--)
    {
       for ( int j = 1; j < i; j++)
       {
        if (a[j - 1] > a[j]) {
            int temp = a[j];
            a[j] = a[j - 1];
            a[j - 1] = temp;
          }
       }
    }
    
}

int main(void) 
{
    int height[NUMBER];

    printf("%d人の身長を入力してください。\n",NUMBER);
    for (int i = 0; i < NUMBER; i++)
    {
        printf("%2d番:",i + 1);
        scanf("%d",&height[i]);
    }

    bsort(height,NUMBER);   //ソート

    puts("昇順にソートしました。");
    for (int i = 0; i < NUMBER; i++)
        printf("%2d番:%d\n",i + 1,height[i]);
    
    return 0;
    
    
}

実行結果

5人の身長を入力してください。
 1番:179
 2番:175
 3番:178
 4番:173
 5番:163
昇順にソートしました。
 1番:163
 2番:173
 3番:175
 4番:178
 5番:179

バブルソートとは

データの集まりを昇順(小さい順)や降順(大きい順)に並べ替えることをソートという。

隣り合う二つの要素の大小関係を調べて、必要に応じて交換を繰り返すのが、バブルソート(単純交換ソート)である。

このプログラムでは、bsort関数が受け取る要素数nの配列aには次の値が入っている。

179175178173163

最初に、先頭二つの値、179,175に着目する。これらは昇順に並んでいないので、これらの値を交換する。

175179178173163

次に2番目と3番目の値、179,178に着目し、同様に交換する。

175178179173163

次ぎに3番目と4番目の値、179,173も同様に交換する。

175178173179163

続いて、4番目と5番目の値、179,163に着目して、交換する。

175178173163179

最大の数値179が末尾に押し出された結果、末尾の1要素がソート済となる。

同じ作業を末尾から2番目の値、163まで行えば、2番目に大きな178が後ろから2番目に押し出されるので、末尾の2要素がソート済となる。

175173163178179

引き続き、末尾から3番目の値、163まで同様に行う。末尾の3要素がソート済となる。

173163175178179

最後に、173と163を交換して、末尾の4要素がソート済となる。

163175178175179

この時、先頭要素は最小値なので、ソートが完了する。

参考)新・解きながら学ぶC言語 第2版 柴田望洋 (監修・著)、 由梨かおる(著)SBクリエイティブ

Amazonで購入できます↑(クリック)

コメント

タイトルとURLをコピーしました