我需要计算C中各种排序算法的时间 我正在检查分类100,200,300,400和500个元素的时间。
令人惊讶的是,排序它们的时间似乎是一样的!
代码中的错误是我得到的同时0.00000这也是荒谬的,需要0秒来对数字进行排序。
代码中有什么错误,我得到了这样的结果?
必须对代码进行哪些更改才能获得准确的时间(以秒为单位)以对数字进行排序。
#include <stdio.h>
#include <time.h>
// Bubble Sort on 100 to 500 elements
int main()
{
int g;
//clock_t ti;
for(g=0;g<5;g++)
{
int n, i, j, swap;
clock_t ti;
time_t t;
srand((unsigned) time(&t));
//scanf("%d", &n);
n=100;
int array[n*(g+1)];
for (i = 0; i < n; i++)
array[i] = rand() % 10000;// Generating random numbers as array entries
//printf("%f \n",ti);
ti = clock();
for (i = 0 ; i < ( n - 1 ); i++)
{
for (j = 0 ; j < n - i - 1; j++)
{
if (array[j] > array[j+1])
{
swap = array[j];
array[j] = array[j+1];
array[j+1] = swap;
}
}
}
ti = clock() - ti;
double time_taken = ((double)ti)/CLOCKS_PER_SEC;
/*for ( i = 0 ; i < n ; i++ )
printf("%d \n ", array[i]);*/
printf("Time Taken to sort %d elements is %f\n",(g+1)*100,time_taken);
}
return 0;
}
我得到的输出是:
对100个元素进行排序所需的时间是0.000000
对200个元素进行排序所需的时间是0.000000
对300个元素进行排序所需的时间是0.000000
对400个元素进行排序所需的时间是0.000000
对500个元素进行排序所需的时间是0.000000
答案 0 :(得分:0)
clock()
可能分辨率太低。检查CLOCKS_PER_SEC
的值。
clock_gettime()
提供高分辨率计时器。
答案 1 :(得分:0)
我更希望直接从CPU寄存器而不是clock()来检查CPU周期。这是准确的,没有开销。如何完成取决于使用的CPU。参见例如http://software.intel.com/en-us/forums/topic/300007
如果您确实需要时间,您当然必须将周期转换为时间。像这样(你必须根据你的系统/环境实现CPU特定的get_cpu_cycles()):
unsigned long begin = 0, end = 0, time = 0;
begin = get_cpu_cycles();
// Do what you like to measure
end = get_cpu_cycles();
unsigned long diff = end - begin;
const unsigned long cpu_speed = 1000000; // Core speed in kilo Hertz -> cpu_time in milliseconds.
double cpu_time = ((double) diff) / cpu_speed;
printf("Time: %.6f", cpu_time);
请注意,这是硬编码为CPU速度为1 GHz。