大規模なデータを並べ替える関数を作成しました。そのパフォーマンスをテストするために、私はそれをと比較しましたqsort
。FreeBSDとGCC4.2.2を実行しているデスクトップでコンパイルするとqsort
、関数よりも時間がかからなくなります。ただし、GCC 4.1.2でRedHatを実行しているサーバーでコンパイルした結果、関数の所要時間は。よりも短くなりましたqsort
。
私の機能がより良いかどうかについて私は混乱してqsort
います。誰かが私がこの奇妙な状況を説明するのを手伝ってもらえますか?
私は同じCFLAGSを使用して何度もテストし、同じマシンで、異なる機能を除いて他のすべての同じ条件で実行しました。
私のコード:
53 int
54 main(void)
55 {
56 int * array_first, * array_next;
57 int len = 1000000;
58 int i;
59 struct timeval start, duration;
60
61
62
63 array_first = malloc(sizeof(int) * len);
64 array_next = malloc(sizeof(int) * len);
65
66
67 for(i = 0; i < len; i++){
68 *(array_first + i) = rand() % 1000;
69 *(array_next + i) = *(array_first + i);
70 }
71
72 set_starttime(&start);
73 quicksort(array_first, len, sizeof(int), compar);
74 get_runningtime(start, &duration);
75 printf("%lu\n", duration.tv_sec * MICRO_PER_SEC + duration.tv_usec);
76 set_starttime(&start);
77 qsort(array_next, len, sizeof(int), compar);
78 get_runningtime(start, &duration);
79 printf("%lu\n", duration.tv_sec * MICRO_PER_SEC + duration.tv_usec);
80
81 assert(memcmp(array_first, array_next, sizeof(int) * len) == 0);
82
83 free(array_first);
84 free(array_next);
85
86 return 0;
87 }
88