問題にチャレンジして、ユーザー同士で解答を教え合ったり、コードを公開してみよう!
順序付け可能なデータの列を、昇順または降順に並び替える操作をソートと呼びます。「データ」は、数値や文字列、オブジェクトなどあらゆるものを指します。
ソート処理はいたるところで利用されています。
・得点表を元にしてランキングを作成する
一番素朴なソートの使い方です。
・データの集まりから、上位k個を取ってくる
ソートをしてから先頭のk個を取ればよいです。
・貪欲アルゴリズムの前処理
データを大きい (小さい) 順に貪欲に処理を行っていくようなアルゴリズムの前処理として、ソートは有効です。
---
バブルソートは、データ列の隣り合う要素を比較し交換することを繰り返すことによりデータ列をソートする手法です。バブルとは「泡」の意味で、ソートの過程でデータが移動する様子が、水中で泡が浮かんでいくように見えることからこの名前がついています。
バブルソート (昇順) は以下のようなアルゴリズムです。
bubble_sort(A : 配列, n : Aの要素数)
for i = 0 to n-2
for j = n-1 down to i+1
if a[j-1] > a[j] then
swap(a[j-1], a[j])
左の要素と比較し、左の方が大きければ交換する
です。これを右から左まで1回行うと、最小の要素が一番左に移動します。 (首を左に傾けてこの処理を眺めると、泡が水面へと上がっていく様子に見えてきませんか?) 次に、一番左の要素を除いて、同じ処理を繰り返します。すると、2番目に小さい要素が左から2番目に移動します。これを最後まで繰り返せば、ソート完了です。n
A_1 A_2 ... A_n
n-1 行出力してください。
i 行目 (1 ≦ i ≦ n) には、i 回目のループ処理が終わった時点での配列を出力してください。配列の各要素を半角スペースで区切り、配列の先頭や末尾に余計な空白を入れないようにしてください。
また、末尾に改行を入れ、余計な文字、空行を含んではいけません。
A_1 A_2 ... A_n
A_1 A_2 ... A_n
...
A_1 A_2 ... A_n
すべてのテストケースにおいて、以下の条件をみたします。
・ 5 ≦ n ≦ 1,000
・-10,000 ≦ A_i ≦ 10,000
5
4 1 3 5 2
1 4 2 3 5
1 2 4 3 5
1 2 3 4 5
1 2 3 4 5