
整列(ソート)とは、でたらめに並べられたデータを順番通りに並び替えることです。
例えば、次のように並び替えます。
| ソート前 | 23 | 9 | 7 | 15 | 3 | 1 | 30 | 19 |
| ソート後 | 1 | 3 | 7 | 9 | 15 | 19 | 23 | 30 |
ソートアルゴリズムでは、高速性の他、安定性が必要なことがあります。
安定とは、ソート後に、同じ値のデータの並び順が変化しないことです。
例えば、次はあるクラスの小テストの結果だとします。
| 野比のび太 | 0 |
| 源静香 | 90 |
| 剛田武 | 50 |
| 骨川スネ夫 | 50 |
| 野比のび太 | 0 |
| 剛田武 | 50 |
| 骨川スネ夫 | 50 |
| 源静香 | 90 |
| 野比のび太 | 0 |
| 骨川スネ夫 | 50 |
| 剛田武 | 50 |
| 源静香 | 90 |
[ ソートの目的 ]
もともとでたらめに並んでいたのならそのままにしておけばよいのに、
わざわざそれをソートする理由は、ズバリ検索のためです。
データがそろえられていると、目的の値がどこにあるか見当がつき、
データがでたらめに並んでいる場合よりも素早く検索できます。
ソートには実に様々なアルゴリズムが考案されていますが、
その中でもバブルソートは、プログラムのわかりやすさからよく取り上げられます。
ただし、速度は遅いため、あまり優秀な方法とはいえません。
その考え方は簡単です。
まず、1つ目と2つ目のデータを比べ、2つ目が小さい場合はデータを交換します。
次は、2つ目と3つ目を比較して交換します。これをデータの最後まで繰り返します。
データの最後まできたら、また1つ目から比較と交換を繰り返します。
これをデータの個数回だけ繰り返せば、データが整列されます。
| 1つ目と2つ目の比較 | (23) | (9) | 7 | 15 | 3 | 1 | 30 | 19 |
| 2つ目が小さいので交換 | (9) | (23) | 7 | 15 | 3 | 1 | 30 | 19 |
| 2つ目と3つ目の比較 | 9 | (23) | (7) | 15 | 3 | 1 | 30 | 19 |
| 3つ目が小さいので交換 | 9 | (7) | (23) | 15 | 3 | 1 | 30 | 19 |
| 以後、これを繰り返す。 |
[ 使用法 ]
SortBubble(ソートする配列、ソートする個数);
動作を確認する場合は、arrayの型をcharとして、文字配列を渡すのが簡単です。void SortBubble(int array[],int n) { int i,j,temp; for (i = 0;i < n - 1;i++) { for (j = 0;j < n - 1;j++) { if (array[j + 1] < array[j]) { temp = array[j];array[j] = array[j + 1];array[j + 1] = temp; } } } }
バブルソートでは2重のループを使うため、計算回数は O(N^2) となります。
始めに述べた通り、ソートアルゴリズムとしては低速です。