小猪猪 发表于 2006-7-5 21:50

怎么用C显示程序运行的时间阿?

小弟做课程设计!数据排序的!要计算所用算法所花的时间!怎么弄阿???

小猪猪 发表于 2006-7-6 15:30

没人会吗?测试程序运行的时间!会的请出手阿!!!!!!!!!!

powerwind 发表于 2006-7-6 16:26

最近很多人都在做课程设计。
测试程序运行的时间 ,无非是获取两个时间之差。


#include "time.h"
#include "stdio.h"
int main()
{
        clock_t start,end;
        int i;
        start=clock();
        for(i=0;i<10000;i++)printf("hello");
        end=clock();
        printf("The different is %6.3f\n",(double)(end-start));
        system("pause");
        return 0;
}

小猪猪 发表于 2006-7-6 17:34

谢谢!还有个问题!现在有个快速排序的程序!是已经定了所排数据的!程序如下:

#include <stdio.h>
#include <stddef.h>

int main(void)
{
    int keys[] = { 5, 8, 9, 15, -18, 150, 0, 55, -5, -108, 100 };
    int i;
    const int keys_size = (sizeof keys) / (sizeof *keys);
    /* prototype */
    void my_qsort(int v[], int left, int right);
   
    my_qsort( keys, 0, keys_size - 1 );
    for ( i = 0; i < keys_size; ++i ) {
      printf("%d ", keys);
    }
   
    printf("\nPress ENTER to quit...");   
    getchar();
    return 0;
}

/* my_qsort:sort v...v into increasing order */
void my_qsort(int v[], int left, int right)
{
   int i, last;
   /* prototype */
   void my_swap(int v[], int i, int j);

   if (left >= right) /* do nothing if array contains */
       return;      /* fewer than two elements */
   my_swap(v, left, (left + right)/2); /* move partition elem */
   last = left;                        /* to v */
   for (i = left + 1; i <= right; i++) /* partition */
       if (v < v)
         my_swap(v, ++last, i);
   my_swap(v, left, last);            /* restore partition elem */
   my_qsort(v, left, last-1);
   my_qsort(v, last+1, right);
}

/* my_swap:interchange v and v */
void my_swap(int v[], int i, int j)
{
   int temp;

   temp = v;
   v = v;
   v = temp;
}

我想把它改成对随机数进行排序!我查了一些资料!我用了下面的语句改

int a;
int i,j,k,temp,n;

srand(time(0)); /* 设置种子 */

for(i=0;i<50;i++)
a=rand();

把rand()加到所要排的数据的地方!但是只有最后一个有数据!要怎么改才能使这个快速排序对随机数排呢!
如果我要用你教的方法输出程序运行的时间应该怎么做呢!
我还做了个冒泡排序!要求是计算各排序方法所用的时间。
我知道大家都很忙!可以的话就帮忙解决一下!今晚再奋斗一晚!明天就要交了!现在还在弄哈希表!头疼阿!

编辑了下格式
by powerwind

[ 本帖最后由 powerwind 于 2006-7-6 21:33 编辑 ]

小猪猪 发表于 2006-7-6 20:39

还有高手在吗???

龙葵 发表于 2006-7-6 20:41

我路过一下打声招呼:小猪猪好

小猪猪 发表于 2006-7-6 20:49

好阿!呵呵!

powerwind 发表于 2006-7-6 21:34

试参考这里的最后一楼回帖
http://gdutbbs.com/thread-70276-1-1.html

小猪猪 发表于 2006-7-6 21:37

我这样写可以计算这个程序的运行时间吗?
#include<stdio.h>
#include<stdlib.h>
#include <conio.h >
#include <math.h >
#include<time.h>

int main()
{ clock_t start,end;
start=clock();
int a;
int i,j,k,temp,n;

srand(time(0)); /* 设置种子 */

for(i=0;i<50;i++)
a=rand(); /* 随机产生50个数 */
for(i=0;i<49;i++) /* 排序 */
{
k=i;
for(j=i+1;j<50;j++)
if(a<a)k=j;
temp=a;
a=a;
a=temp;
}
printf("50个随机数经排序后为:\n");
for(i=0;i<50;i++)
printf("%d,",a);
end;
printf("运行时间为%6.3f\n",(double)(end-start));
end=clock();
system("pause");
return 0;
}

小猪猪 发表于 2006-7-6 21:43

还有一种方法!

#include<stdio.h>
#include<stdlib.h>
#include <conio.h >
#include <math.h >
#include<time.h>

int main()
{
int a;
int i,j,k,temp,n;
long t1,t2;
srand(time(NULL));
time(&t1);

srand(time(0)); /* 设置种子 */

for(i=0;i<50;i++)
a=rand(); /* 随机产生50个数 */
for(i=0;i<49;i++) /* 排序 */
{
k=i;
for(j=i+1;j<50;j++)
if(a<a)k=j;
temp=a;
a=a;
a=temp;
}
printf("50个随机数经排序后为:\n");
for(i=0;i<50;i++)
printf("%d,",a);
time(&t2);
printf("运行时间为%6.3f\n",(double)(t2-t1));
system("pause");
return 0;
}
但是得到的时间都是0.000

[ 本帖最后由 powerwind 于 2006-7-6 22:52 编辑 ]

小猪猪 发表于 2006-7-6 21:45

不好意思,还不会版主帮忙弄的格式!呵呵

powerwind 发表于 2006-7-6 22:02

格式用[ code ]代码[ / code ]
楼主最好自己试试行不行,如果不行,再想想为什么,想办法解决。
总体思路正确,其它的就是锻炼解决问题的能力了。

小猪猪 发表于 2006-7-6 22:05

调试成功!2个都可以!但是运行时间都是0.000!不管我后面放多少位都是???

powerwind 发表于 2006-7-6 22:13

printf("运行时间为%6.3f\n",(double)(end-start));
end=clock();
是不是这两句要变成
end=clock();
printf("运行时间为%6.3f\n",(double)(end-start));

小猪猪 发表于 2006-7-6 22:22

我上面用的第二种方法就是你 的这个思想!我试了你的办法!结果还是一样的!是不是要设定单位用更小的单位呢!现在的单位是以秒计算的吗?

powerwind 发表于 2006-7-6 22:58

也行是运行的时间太短。
改成这样可以

#include<stdio.h>
#include<stdlib.h>
#include <conio.h >
#include <math.h >
#include<time.h>

int main()
{
int a;
int i,j,k,temp,n;
double t1,t2;

clock_t start,end;
start=clock();


srand(time(NULL));
srand(time(0)); /* 设置种子 */

for(i=0;i<500;i++)
a=rand(); /* 随机产生50个数 */
for(i=0;i<49;i++) /* 排序 */
{
k=i;
for(j=i+1;j<500;j++)
if(a<a)k=j;
temp=a;
a=a;
a=temp;
}
printf("50个随机数经排序后为:\n");
for(i=0;i<500;i++)
printf("%d,",a);

end=clock();

printf("运行时间为%6.3f\n",(double)(end-start));
system("pause");
return 0;
}

小猪猪 发表于 2006-7-6 23:05

恩!随机数多了时间就可以显示了!呵呵!谢谢版主!
页: [1]
查看完整版本: 怎么用C显示程序运行的时间阿?