バブルソート

バブルソート

ゲーム開発ではランキングや高速化などで値をソートする必要が必要になることが多々あります。
そんな時に使える一番原始的なソートアルゴリズムにバブルソートがあります。

アルゴリズム

バブルソートのアルゴリズムは至極単純です。

先頭から順にそれ以降のデータと値の比較を行っていきデータを入れ替えていくだけです。
※昇順、降順のどちらで比較するかによって符号の向きが逆になります。

実装方法

int型のデータをソートする場合には下記のようになります。

  1. // バブルソートを使ったソート
  2. void BubbleSort(int* pData, int count)
  3. {
  4. for (int i = 0; i < count; i++)
  5. {
  6. for (int j = count-1; i < j; j--)
  7. {
  8. if (pData[i] <= pData[j]) continue;
  9. int temp = pData[i];
  10. pData[i] = pData[j];
  11. pData[j] = temp;
  12. }
  13. }
  14. }


これでcount個のint型データが入ったpDataがソートされます。

使い方

実際に使う時は下記のようになります。

  1. // ソートするデータリスト
  2. int data[] = { 5, 15, 3, 6, 7, 8, 20, 31 };
  3. // ソートテスト
  4. void SortTest()
  5. {
  6. int count = sizeof(data) / sizeof(*data);
  7. // バブルソート
  8. BubbleSort(data, count);
  9. for( int i=0; i < count; i++ )
  10. {
  11. printf("%d:%d\n", i, data[i]);
  12. }
  13. }


これでdataの配列をソートして結果を表示します。

今回の場合は下記のような結果になります。

0:3
1:5
2:6
3:7
4:8
5:15
6:20
7:31

ソートのサンプル動画

バブルソートの流れを動画にしました。
今回の実装はこのような流れでソートがおこなわれています。

 

ソート処理はゲーム内でも多用する処理です。
バブルソートは速度的に多用はしませんが、
ソートの基本知識として必ず理解しておきましょう。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です