練習 [5] 配列(5/5)

練習 5(提出プログラム名:p0505a.c)※加点対象

この問題は配列を使った練習問題であり
中級クラスの受講生は必須ではない(提出しなくてもよい)が,上級クラスの受講生は必須とする.
なお,どちらのクラスであっても適切に正解すれば加点対象として扱う.

まず,このプログラム p0505a.c をダウンロードしなさい.

このプログラムでは整数 n を読み込んだ後,配列へ先頭から n, n-1, n-2, … という具合いに 1 ずつ減っていく整数を格納している.そして,その内容を「整列前」として出力させている.
その後,バブルソートのアルゴリズムに従って配列の内容を昇順(小さい順)に並べかえ
再びその内容を「整列後」として出力させようとしているが肝心のバブルソート部分が抜けている
これを完成させなさい
ただし,この問題では最初に入力される整数 n は 1 以上 256 以下であると仮定してプログラムを作ってよい.

【注意】この問題では必ず「バブルソート」のアルゴリズムを実装すること.それ以外のアルゴリズムでもって並べ替えを行ってはいけません.

【バブルソート】
詳しくは「データ構造とアルゴリズム」の講義で説明されているはずなので,ここでは簡単にふれるだけにしておきます.
要は「隣り合う数値の大小関係が目的に合っていなければ値を交換する」という行為をひたすら繰り返すだけのアルゴリズムです.

プログラムにあわせて,データ数は n とし,各データは data[j] 等で表すことにすると,
i = 0n-1 の範囲で以下を繰り返す.
 ② j = 0n-1-i の範囲で③を繰り返す.
  ③もし data[j] > data[j+1] ならば両者の値を入れ替える.

  • 【プログラムの実行例】(その1)赤字は実行時にキーボードから入力する内容
データ数を入力してください:10

整列前:
 10 9 8 7 6 5 4 3 2 1

整列後:
 1 2 3 4 5 6 7 8 9 10
  • 【プログラムの実行例】(その2)赤字は実行時にキーボードから入力する内容
データ数を入力してください:2

整列前:
 2 1

整列後:
 1 2
  • 【プログラムの実行例】(その赤字は実行時にキーボードから入力する内容
データ数を入力してください:1

整列前:
 1

整列後:
 1

【過去にあったミス(実際に減点となり,やり直しを命じられた例)】
■ 上に示した3通りの実行例と出力結果が違っている
インデントに不備がある(VSCode 上でインデントを自動で揃える作業をやっていない).


第 5 回(Cプログラミング;3 限目の方)の練習問題は以上の5問です.
p0501a.c ~ p0505a.c を Moodle から提出してください.※ただし,ファイル名を間違えないこと.
なお,コンパイルエラーや無限ループになるプログラムを 1 個でも提出した場合は総合評価を 0 点とするので十分に注意すること.
なお,提出後に間違いに気付いた場合,〆切前であれば差し替え(上書き)は可能です.