最近在参加ACM/ICPC的培训,在做一道深度优先搜索+强剪枝的问题时,想要通过多种剪枝策略来提高运行效率,减少运行时间.
在<time.h>里有函数clock();本身这个函数取得的时间好像是ms,要取得s就
写成clock()/CLOCKS_PER_SEC;但CLOCKS_PER_SEC是在time.h里定义的,如果没这个定义
那只能用clock();取得ms;这个函数的执行不会中途停止,如果是在windows系统下,因为它是
多任务系统,它需要在各任务之间切换,如果在测试过程中,执行其他程序,所其得的时间,就会
出现差别,还有windows运行速度相当快,对于小型的测试,所得的时间几乎为0,因此最好将
要测试的过程执行100次或以上,然后再将取得的时间执行次数;输出非常耗时间,没什么必要
的话,就不要输出
这是一个测试选择排序的程序
#include <stdio.h> #include <stdlib.h> #include <time.h> #define M 1000 /* 执行次数 */ #define N 500 /* 数组大小 */ void SelectSort(int *a,int l,int r) { int i,j,v; for (i=0;i<r;i++) { for (j=i+1;j<=r;j++) { if (*(a+i)>*(a+j)) v=*(a+i),*(a+i)=*(a+j),*(a+j)=v; } } } void main() { int a[N],i,j; double start,finish; /* 开始时间,结束时间 */ start=(double)clock(); /* 我的time.h内没有CLOCKS_PER_SEC */ for (j=0;j<M;j++) { /* 执行M次 */ for (i=0;i<N;*(a+i++)=rand()%10); /* 每次重新赋值 */ SelectSort(a,0,N-1); } finish=(double)clock(); printf("%.4fms",(finish-start)/M); getchar(); }