バブルソートでは, 外側の i のループが n回実行され, 内側の j のループで
値の入れ換えが, 平均 n/2 回 実行されます. 従って,
計算量はおよそ, となります. 計算量を問題にするときには,
定数倍は無視して, n の冪乗部分だけを問題にします.
バブルソートの計算量は, 「
のオーダー」であるといいます.
実際の問題では, これでは効率が悪く, バブルソートを利用する事は
ほとんどありません. ただし, アルゴリズムがわかりやすく
記述が簡単ですから, ちょっとしたプログラムには, 使えなくはありません.
バグの無いプログラムが書きやすいというのは, 1つの利点です.
今回のプログラムは全て整列するプログラムが同じで, main() の前にある
int data[SIZE]= {99,73,20,32,34,5,64,97,25,12,83,9,21,40,3,44,69,15,58,75};という配列であるとします.
次のプログラムは, バブルソートのアルゴリズムを C で記述してみた ものです. ペイジがまたがっていますが, 我慢して下さい.
/* File name 13-1.c */ #include <stdio.h> #define SIZE 20 int data[SIZE]= {99,73,20,32,34,5,64,97,25,12,83,9,21,40,3,44,69,15,58,75}; main() { int i, j; int temp; for (i=SIZE-1 ; i > 0; i--){ /* Sort Process */ for (j=0; j < i; j++){ if (data[j] > data[j+1]){ temp = data[j+1]; data[j+1]=data[j]; data[j]=temp; } } } /* End of sorting. */ for( i=0; i< SIZE; i++) /* Output the result. */ printf("%d ", data[i]); printf("\n"); }