C言語アルゴリズム-バブルソート
バブルソート(Bubble Sort)とは
バブルソートとは、隣り合ってる要素の大小関係を比較して入れ替える、という操作を繰り返す整列アルゴリズムです。
要素が正しい位置に泡のように登っていく様子からバブルソートと呼ばれます。アルゴリズムは単純ですが、無駄な比較が多くて実行速度は遅いため、勉強以外で用いられることはありません。計算量は「O(n^2)」となります。
バブルソート整列の様子
配列の後ろから先頭に向かってスキャンしていき、隣り合う2つの要素の大小関係が逆である場合、要素を入れ替えます。
[before]:2 6 3 4 1 5
---------[1 round]---------
2 6 3 4 1 5
2 6 3 1 4 5
2 6 1 3 4 5
2 1 6 3 4 5
1 2 6 3 4 5
---------[2 round]---------
1 2 6 3 4 5
1 2 6 3 4 5
1 2 3 6 4 5
1 2 3 6 4 5
---------[3 round]---------
1 2 3 6 4 5
1 2 3 4 6 5
1 2 3 4 6 5
---------[4 round]---------
1 2 3 4 5 6
1 2 3 4 5 6
[after]:1 2 3 4 5 6
C言語によるバブルソートのプログラム
数値配列の整列を行います。
#include <stdio.h>
static void
array_print(int *array, unsigned int size)
{
int i = 0;
for(i = 0; i < size; i++){
printf("%d ", array[i] );
}
putchar('\n');
}
/*!
* @brief バブルソート整列を行う。
* @param[in/out] array 整列する要素配列
* @param[in] size 配列のサイズ
*/
void
bubble_sort(int *array, unsigned int size){
int i, j, t;
for(i = 0; i < size - 1; i++){
printf("---------[%d round]---------\n", i + 1);
for(j = size - 1; j > i; j--){
if (array[j] < array[j - 1]){
t = array[j];
array[j] = array[j - 1];
array[j - 1] = t;
}
array_print(array, size);
}
}
}
int
main(void)
{
int data[] = {2,6,3,4,1,5};
printf("[before]:");
array_print(data, sizeof(data)/4);
bubble_sort(data, sizeof(data)/4);
printf("[after]:");
array_print(data, sizeof(data)/4);
return(0);
}
関連ページ
- C言語
- C言語アルゴリズム-クイックソート
- C言語アルゴリズム-シェルソート
- C言語アルゴリズム-マージソート
- C言語アルゴリズム-ヒープソート
- C言語アルゴリズム-バブルソート
- C言語アルゴリズム-ビンソート
- C言語アルゴリズム-ボゴソート
- C言語アルゴリズム-基数ソート
- C言語アルゴリズム-選択ソート
- C言語アルゴリズム-挿入ソート
- C言語アルゴリズム-分布数え上げソート