以下二进制搜索程序使用0
返回GetTickCount()
毫秒的运行时间,无论在给定的值列表中设置了多大的搜索项。
还有其他方法可以获得比较的运行时间吗?
以下是代码:
#include <iostream>
#include <windows.h>
using namespace std;
int main(int argc, char **argv)
{
long int i = 1, max = 10000000;
long int *data = new long int[max];
long int initial = 1;
long int final = max, mid, loc = -5;
for(i = 1; i<=max; i++)
{
data[i] = i;
}
int range = final - initial + 1;
long int search_item = 8800000;
cout<<"Search Item :- "<<search_item<<"\n";
cout<<"-------------------Binary Search-------------------\n";
long int start = GetTickCount();
cout<<"Start Time : "<<start<<"\n";
while(initial<=final)
{
mid=(initial+final)/2;
if(data[mid]==search_item)
{
loc=mid;
break;
}
if(search_item<data[mid])
final=mid-1;
if(search_item>data[mid])
initial=mid+1;
}
long int end = GetTickCount();
cout<<"End Time : "<<end<<"\n";
cout << "time: " << double(end - start)<<" milliseconds \n";
if(loc==-5)
cout<<" Required number not found "<<endl;
else
cout<<" Required number is found at index "<<loc<<endl;
return 0;
}
答案 0 :(得分:1)
您的代码如下所示:
int main()
{
// Some code...
while (some_condition)
{
// Some more code...
// Print timing result
return 0;
}
}
那是为什么你的代码打印零时间,你只做一次循环迭代然后退出程序。
答案 1 :(得分:0)
尝试使用time.h标头中的clock_t对象:
clock_t START, END;
START = clock();
**YOUR CODE GOES HERE**
END = clock();
float clocks = END - START;
cout <<"running time : **" << clocks/CLOCKS_PER_SEC << "** seconds" << endl;
CLOCKS_PER_SEC是一个定义的var,用于从时钟周期转换为秒。
答案 2 :(得分:0)
https://msdn.microsoft.com/en-us/library/windows/desktop/ms724408(v=vs.85).aspx 本文说如果系统运行49.7天, GetTickCount 的结果将换行为零。
你可以在这里找到:Easily measure elapsed time如何用C ++来衡量时间。
答案 3 :(得分:0)
您可以使用time.h header
并在您的代码中执行以下操作:
clock_t Start, Stop;
double sec;
Start = clock();
//call your BS function
Stop = clock();
Sec = ((double) (Stop - Start) / CLOCKS_PER_SEC);
并打印秒!
我希望这会对你有所帮助!
答案 4 :(得分:0)
二进制搜索的复杂性是log2(N),23
约为N = 10000000
。
我认为它不足以实时测量甚至clock
。
在这种情况下,您应该使用unsigned long long __rdtsc()
,它返回上次重置时的处理器滴答数。在二进制搜索之前和之后放置此内容,并在获得结束时间后放置cout << start;
。将包括过度的输出时间。
data
数组周围也存在内存损坏。 C中的索引从0
到size - 1
,因此没有data[max]
元素。
在调用return之前delete [] data;
。