平成20年度春季 ソフトウェア開発技術者試験(SW)の午後問題5は、
に関する問題でした。
プログラム例(h20h_sw_pm5.c)*1
実行結果
$ gcc h20h_sw_pm5.c && ./a.out 1 2 3 4 5 6 7 8
バブルソートとの速度比較
これだけで終わっては面白くないので、効率の悪いことで有名な のアルゴリズムであるバブルソートと速度比較を行ってみました。
次のようにプログラムを加筆修正しました。
#include <time.h> void bubble_sort(int [], int ); void bubble_sort(int a[], int n) { int i, j, tmp; for (i = 0; i < n - 1; i++) { for (j = n - 1; j > i; j--) { if (a[j - 1] > a[j]) { tmp = a[j - 1]; a[j - 1] = a[j]; a[j] = tmp; } } } } int main(void) { int hnum = 100000, i; int arr1[hnum], arr2[hnum]; clock_t c1, c2; srand((unsigned)time(NULL)); for (i = 0; i < hnum; i++) { arr1[i] = arr2[i] = rand(); } c1 = clock(); merge_sort(arr1, 0, hnum - 1); c2 = clock(); printf("Merge Sort = %f[s]\n", (double)(c2-c1)/CLOCKS_PER_SEC); c1 = clock(); bubble_sort(arr2, hnum); c2 = clock(); printf("Bubble Sort = %f[s]\n", (double)(c2-c1)/CLOCKS_PER_SEC); return 0; }
実行結果
要素の数を100000個でやってみたのが以下です。
$ gcc h20h_sw_pm5_cmp.c && ./a.out Merge Sort = 0.044918[s] Bubble Sort = 36.233415[s]
以前、ヒープソートとバブルソートでの速度比較を行ったときも、との性能差を肌で感じることができましたが、のアルゴリズムであるマージソートも高速ですね。