バブルソート
ゲーム開発ではランキングや高速化などで値をソートする必要が必要になることが多々あります。
そんな時に使える一番原始的なソートアルゴリズムにバブルソートがあります。
アルゴリズム
バブルソートのアルゴリズムは至極単純です。
先頭から順にそれ以降のデータと値の比較を行っていきデータを入れ替えていくだけです。
※昇順、降順のどちらで比較するかによって符号の向きが逆になります。
実装方法
int型のデータをソートする場合には下記のようになります。
- // バブルソートを使ったソート
- void BubbleSort(int* pData, int count)
- {
- for (int i = 0; i < count; i++)
- {
- for (int j = count-1; i < j; j--)
- {
- if (pData[i] <= pData[j]) continue;
- int temp = pData[i];
- pData[i] = pData[j];
- pData[j] = temp;
- }
- }
- }
これでcount個のint型データが入ったpDataがソートされます。
使い方
実際に使う時は下記のようになります。
- // ソートするデータリスト
- int data[] = { 5, 15, 3, 6, 7, 8, 20, 31 };
- // ソートテスト
- void SortTest()
- {
- int count = sizeof(data) / sizeof(*data);
- // バブルソート
- BubbleSort(data, count);
- for( int i=0; i < count; i++ )
- {
- printf("%d:%d\n", i, data[i]);
- }
- }
これでdataの配列をソートして結果を表示します。
今回の場合は下記のような結果になります。
0:3
1:5
2:6
3:7
4:8
5:15
6:20
7:31
ソートのサンプル動画
バブルソートの流れを動画にしました。
今回の実装はこのような流れでソートがおこなわれています。
動画プレーヤー
00:00
00:00
ソート処理はゲーム内でも多用する処理です。
バブルソートは速度的に多用はしませんが、
ソートの基本知識として必ず理解しておきましょう。