工大后院

 找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 3344|回复: 16

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

[复制链接]
发表于 2006-7-5 21:50 | 显示全部楼层 |阅读模式
小弟做课程设计!数据排序的!要计算所用算法所花的时间!怎么弄阿???
 楼主| 发表于 2006-7-6 15:30 | 显示全部楼层
没人会吗?测试程序运行的时间!会的请出手阿!!!!!!!!!!
回复

使用道具 举报

发表于 2006-7-6 16:26 | 显示全部楼层
最近很多人都在做课程设计。
测试程序运行的时间 ,无非是获取两个时间之差。


  1. #include "time.h"
  2. #include "stdio.h"
  3. int main()
  4. {
  5.         clock_t start,end;
  6.         int i;
  7.         start=clock();
  8.         for(i=0;i<10000;i++)printf("hello");
  9.         end=clock();
  10.         printf("The different is %6.3f\n",(double)(end-start));
  11.         system("pause");
  12.         return 0;
  13. }
复制代码
回复

使用道具 举报

 楼主| 发表于 2006-7-6 17:34 | 显示全部楼层
谢谢!还有个问题!现在有个快速排序的程序!是已经定了所排数据的!程序如下:

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

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

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

  26.    if (left >= right) /* do nothing if array contains */
  27.        return;        /* fewer than two elements */
  28.    my_swap(v, left, (left + right)/2); /* move partition elem */
  29.    last = left;                        /* to v[0] */
  30.    for (i = left + 1; i <= right; i++) /* partition */
  31.        if (v[i] < v[left])
  32.            my_swap(v, ++last, i);
  33.    my_swap(v, left, last);            /* restore partition elem */
  34.    my_qsort(v, left, last-1);
  35.    my_qsort(v, last+1, right);
  36. }

  37. /* my_swap:  interchange v[i] and v[j] */
  38. void my_swap(int v[], int i, int j)
  39. {
  40.    int temp;

  41.    temp = v[i];
  42.    v[i] = v[j];
  43.    v[j] = temp;
  44. }
复制代码

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

  1. int a[50];
  2. int i,j,k,temp,n;

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

  4. for(i=0;i<50;i++)
  5. a[i]=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 | 显示全部楼层
好阿!呵呵!
回复

使用道具 举报

发表于 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[50];
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[j]<a[k])k=j;
temp=a[k];
a[k]=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 | 显示全部楼层
还有一种方法!

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include <conio.h >
  4. #include <math.h >
  5. #include<time.h>

  6. int main()
  7. {
  8. int a[50];
  9. int i,j,k,temp,n;
  10. long t1,t2;
  11. srand(time(NULL));
  12. time(&t1);

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

  14. for(i=0;i<50;i++)
  15. a[i]=rand(); /* 随机产生50个数 */
  16. for(i=0;i<49;i++) /* 排序 */
  17. {
  18. k=i;
  19. for(j=i+1;j<50;j++)
  20. if(a[j]<a[k])k=j;
  21. temp=a[k];
  22. a[k]=a[i];
  23. a[i]=temp;
  24. }
  25. printf("50个随机数经排序后为:\n");
  26. for(i=0;i<50;i++)
  27. printf("%d,",a[i]);
  28. time(&t2);
  29. printf("运行时间为%6.3f\n",(double)(t2-t1));
  30. system("pause");
  31. return 0;
  32. }
复制代码

但是得到的时间都是0.000

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

使用道具 举报

 楼主| 发表于 2006-7-6 21:45 | 显示全部楼层
不好意思,还不会版主帮忙弄的格式!呵呵
回复

使用道具 举报

发表于 2006-7-6 22:02 | 显示全部楼层
格式用[ code ]代码[ / code ]
楼主最好自己试试行不行,如果不行,再想想为什么,想办法解决。
总体思路正确,其它的就是锻炼解决问题的能力了。
回复

使用道具 举报

 楼主| 发表于 2006-7-6 22:05 | 显示全部楼层
调试成功!2个都可以!但是运行时间都是0.000!不管我后面放多少位都是???
回复

使用道具 举报

发表于 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 | 显示全部楼层
我上面用的第二种方法就是你 的这个思想!我试了你的办法!结果还是一样的!是不是要设定单位用更小的单位呢!现在的单位是以秒计算的吗?
回复

使用道具 举报

发表于 2006-7-6 22:58 | 显示全部楼层
也行是运行的时间太短。
改成这样可以

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include <conio.h >
  4. #include <math.h >
  5. #include<time.h>

  6. int main()
  7. {
  8. int a[500];
  9. int i,j,k,temp,n;
  10. double t1,t2;

  11. clock_t start,end;
  12. start=clock();


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

  15. for(i=0;i<500;i++)
  16. a[i]=rand(); /* 随机产生50个数 */
  17. for(i=0;i<49;i++) /* 排序 */
  18. {
  19. k=i;
  20. for(j=i+1;j<500;j++)
  21. if(a[j]<a[k])k=j;
  22. temp=a[k];
  23. a[k]=a[i];
  24. a[i]=temp;
  25. }
  26. printf("50个随机数经排序后为:\n");
  27. for(i=0;i<500;i++)
  28. printf("%d,",a[i]);

  29. end=clock();

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

复制代码
回复

使用道具 举报

 楼主| 发表于 2006-7-6 23:05 | 显示全部楼层
恩!随机数多了时间就可以显示了!呵呵!谢谢版主!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

QQ|Archiver|手机版|小黑屋|广告业务Q|工大后院 ( 粤ICP备10013660号 )

GMT+8, 2024-5-16 08:52

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表