计算执行C程序代码所需的时间?

时间:2014-01-24 09:03:12

标签: c sorting time

我需要计算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

2 个答案:

答案 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。