我将编写一个程序来比较不同的排序算法,包括时间和空间。空间已经解决了,但是测量时间有些困难。以下是运行排序的代码:
void test(short* n, short len) {
short i, j, a[1024];
for(i=0; i<2; i++) { // Loop over each sort algo
memused = 0; // Initialize memory marker
for(j=0; j<len; j++) // Copy scrambled list into fresh array
a[j] = n[j]; // (Sorting algos are in-place)
// ***Point A***
switch(i) { // Pick sorting algo
case 0:
selectionSort(a, len);
case 1:
quicksort(a, len);
}
// ***Point B***
spc[i][len] = memused; // Record how much mem was used
}
}
现在,我需要测量排序算法花费的时间。最明显的方法是记录点(a)的时间,然后将其从点(b)的时间中减去。但是,C语言的时间函数都不够好:
time()可以给我秒级时间,但是算法速度比这更快,因此我需要更精确的方法。
clock()给出程序启动以来的CPU时钟周期数,但似乎向最近的10,000舍入,仍然不够小。
time shell命令足够好,但是我需要每个算法运行超过1,000次测试,并且我需要每个算法单独的时间。
我不知道 getrusage()返回什么,但它的时间也太长了。
我需要的是单位时间(如果可能)比排序函数的运行时间小得多的时间:大约为2毫秒。那么我的问题是:我从哪里获取它?
getrusage()
表明是 POSIX 系统,在这种情况下,适用于gettimeofday()
或clock_gettime()
(分别具有微秒和纳秒分辨率,但不一定具有所述的准确性)。 - Jonathan Lefflerman 2 clock_gettime
,或者如果您可以使用C2011,则为int timespec_get(struct timespec *ts, int base);
。 - Daniel Fischer