サイトアイコン GAMEWORKS LAB

バブルソート

バブルソート

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

アルゴリズム

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

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

実装方法

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

ソートのサンプル動画

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

 

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

モバイルバージョンを終了