计算程序运算时间问题
下面代码功能是两种实现0~n不重复随机数获得方法,后来想比较下哪个更快 结果死活出不来结果了,不知道为什么,请大家伙帮看看,谢谢!
#include "stdafx.h"
#include "stdlib.h"
#include "stdio.h"
#include "time.h"
#include "windows.h"
#define TIMES 100
void swap(int& a, int& b)
{
a = a + b;
b = a - b;
a = a - b;
}
int main(int argc, char* argv[])
{
printf("MAX_RAND=%u\n", RAND_MAX);
srand((unsigned int)time(NULL));
DWORD inter = GetTickCount();
int a[TIMES];
int i = 0;
for (; i < TIMES; ++i)
{
a[i] = i;
}
for (i=TIMES; i > 0; --i)
{
swap(a[i], a[rand()%TIMES]);
}
inter = GetTickCount() - inter;
printf("inter=%u\n================\n", inter);
DWORD inter2 = ::GetTickCount();
int b[TIMES] = {0};
int m;
for (i=0; i<TIMES; i++)
{
while(b[m=rand()%TIMES]);
b[m] = i;
}
inter2 = ::GetTickCount() - inter2;
printf("inter2=%u\n================\n", inter2);
return 0;
}
[解决办法]
可以用clock函数计时,可以得到
[解决办法]
结果是0是么?你那个循环耗费的时间太少了,没有达到GetTickCount的精度
GetTickCount在inter多核处理器上的精度是15.625 ms
你可以用QueryPerformanceCounter
你搜一下高精度计时
[解决办法]
用
QueryPerformanceCounter
QueryPerformanceFrequency
试试