ここから暫く整列を扱います.
まずは,数値を小さい順や大きい順にに並べることを考えましょう.
このページでは,整列アルゴリズムの中で最も基本的な バブルソート を用いて,int型の配列データを並べ替えるプログラムを作成します.

バブルソートとは

配列 a[0]~a[4] に次のような整数型データが入っているとします.

a[0] a[1] a[2] a[3] a[4]
32 12 24 8 17

このデータを a[0] から昇順に並べ替えます.

並べ替えの手順は,データ行の右側から2つずつのデータを比べて,右側のデータが左側のデータより小さければ2つのデータを並べ替えていきます.

1 この場合は,最初に a[3] の 8 と a[4] の 17 を比較します.

32 12 24 8 17

8 の方が小さいので,そのままにします.
したがって,データの並び方は変わりません.

2 次に,a[2] の 24 と a[3] の 8 を比較します.

32 12 24 8 17

右側の 8 の方が小さいので,a[2] と a[3] の値を入れ替えます.

32 12 8 24 17

3 続けて,a[1] の 12 と a[2] の 8 を比較します.

32 12 8 24 17

右側の 8 の方が小さいので,a[1] と a[2] の値を入れ替えます.

32 8 12 24 17

4 さらに,a[0] の 32 と a[1] の 8 を比較します.

32 8 12 24 17

右側の 8 の方が小さいので,a[0] と a[1] の値を入れ替えます.

8 32 12 24 17

以上の操作で,データ中の最小値である 8 が a[0] に納まりました.

8 32 12 24 17

残りのデータについて,同じ操作を繰り返せばデータを昇順に並べ替えることができます.
逆に,2つのデータを比べて大き方のデータを左に移していけば,データを降順に並べ替えることができます.
このソート手順は,データが昇順または降順に浮かび上がってくるように見えることから,泡に例えてバブルソートと呼ばれます.

Cording

整数値データを10個与えて,昇順に並べるプログラムを作ります.

#include <stdio.h>
int main(void) {
    int a[] = {100, 53, 19, 8, 81, 37, 16, 25, 44, 22};
    int len = sizeof(a) / sizeof(int);
    for (int i = 0; i < len - 1; i++) {
        for (int j = len - 1; j > i; j--) {
            if (a[j - 1] > a[j]) {
                int b = a[j];
                a[j] = a[j - 1];
                a[j - 1] = b;
            }
        }
  }
  for (int i = 0; i < len; i++) {
        printf("%d, ", a[i]);
    }
    printf("\n");
    return 0;
}

コマンドについては,特に問題になることはありませんが,細かなところで2点確認をしておきます.

1つ目は,配列へのデータへの格納です.
見てのとおり

a[] = {100, 53, 19, 8, 81, 37, 16, 25, 44, 22}

と { } で囲ってまとめて入力することができます.

もう一つは,配列のデータ数を得る方法です.
演算子 sizeof() を使います.
これは,変数や型のメモリサイズを得るものです.
ここではデータ数が10となっていますが,実際に使うときのデータ数は,そのときそのときで変わりますので,データ数を得る手段を用意しておく必要があります.

sizeof(a) で配列 a[] のメモリサイズを取得します
sizeof(int) で int型変数のメモリサイズを取得します

sizeof(a) は,あくまでもメモリサイズでありデータの個数ではありません.
変数型のメモリサイズで割ることにより,データの個数を取得することができます.

Last modified: Monday, 30 October 2023, 8:54 AM