我编写了一个对大量数据进行排序的函数。为了测试它的性能,我将它与qsort
. 如果我在运行带有 GCC 4.2.2 的 FreeBSD 的桌面上编译它,结果是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