今回は、バブルソートのアルゴリズムを利用したプログラムをご紹介しよう。
任意に入力した学生の身長を読み込んで、昇順にソートするプログラムである。
なお、本プログラムは、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には次の値が入っている。
179 | 175 | 178 | 173 | 163 |
最初に、先頭二つの値、179,175に着目する。これらは昇順に並んでいないので、これらの値を交換する。
175 | 179 | 178 | 173 | 163 |
次に2番目と3番目の値、179,178に着目し、同様に交換する。
175 | 178 | 179 | 173 | 163 |
次ぎに3番目と4番目の値、179,173も同様に交換する。
175 | 178 | 173 | 179 | 163 |
続いて、4番目と5番目の値、179,163に着目して、交換する。
175 | 178 | 173 | 163 | 179 |
最大の数値179が末尾に押し出された結果、末尾の1要素がソート済となる。
同じ作業を末尾から2番目の値、163まで行えば、2番目に大きな178が後ろから2番目に押し出されるので、末尾の2要素がソート済となる。
175 | 173 | 163 | 178 | 179 |
引き続き、末尾から3番目の値、163まで同様に行う。末尾の3要素がソート済となる。
173 | 163 | 175 | 178 | 179 |
最後に、173と163を交換して、末尾の4要素がソート済となる。
163 | 175 | 178 | 175 | 179 |
この時、先頭要素は最小値なので、ソートが完了する。
(参考)新・解きながら学ぶC言語 第2版 柴田望洋 (監修・著)、 由梨かおる(著)SBクリエイティブ
コメント