データを並べ替えるための整列(ソート)アルゴリズムはコンピュータ科学には欠かせない基本的なアルゴリズムです。例えば、下図のように「整数値の配列の要素を昇順に並べ替える」という操作が整列です。
多くの整列アルゴリズムが考案されてきましたが、その中でも基本的なアルゴリズムの1つがバブルソートです。例として、与えられた整数値の配列をバブルソートで昇順に並べてみます。
バブルソートでは、各計算ステップにおいて、配列を「ソートされた部分」と「ソートされていない部分」に分けて考えます。最初は配列全体がソートされていない部分になります。
ソートされていない部分の先頭から、隣同士の要素を比較して(図では緑色の要素)、大きい値が右にくるようにそれらを交換します。二つの値が等しい場合は交換しません。
この処理をソートされていない部分(図では白色の要素)の末尾まで繰り返します。最後に、末尾をソートされている部分(図では青色の要素)に追加して1ステップが完了します。
このステップをソートされていない部分の長さが1になるまで繰り返します。
このようにソートされていない部分の長さが 1 になったら、ソートの処理を終了します。
それでは、n 個の数値の配列を入力とし、数値が配列の先頭から昇順に並ぶように上記のバブルソートの手順で並べ替えを行い、要した配列要素の交換回数を出力するプログラムを作成してください。
複数のデータセットの並びが入力として与えられます。入力の終わりはゼロひとつの行で示されます。 各データセットは以下の形式で与えられます。
n a1 a2 : an
1行目に数値の数 n (1 ≤ n ≤ 100)、続く n 行にi 番目の数値 ai (1 ≤ ai ≤ 1000000) が与えられます。
データセットの数は 20 を超えません。
データセットごとにデータ要素の交換回数(整数)を1行に出力します。
5 5 3 2 1 4 6 1 2 3 4 5 6 3 3 2 1 0
7 0 3