C++ 计算二进制搜索的运行时间
以下二进制搜索程序使用C++ 计算二进制搜索的运行时间,c++,C++,以下二进制搜索程序使用GetTickCount()返回的运行时间为0毫秒,无论搜索项在给定的值列表中设置得有多大 是否有其他方法获取运行时间以进行比较 代码如下: #include <iostream> #include <windows.h> using namespace std; int main(int argc, char **argv) { long int i = 1, max = 10000000; long int *d
GetTickCount()
返回的运行时间为0
毫秒,无论搜索项在给定的值列表中设置得有多大
是否有其他方法获取运行时间以进行比较
代码如下:
#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;
}
#包括
#包括
使用名称空间std;
int main(int argc,字符**argv)
{
长整数i=1,最大值=10000000;
长整型*数据=新长整型[max];
长int初始值=1;
长整数最终=最大值,中间值,loc=-5;
对于(i=1;i尝试使用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;
时钟开始、结束;
开始=时钟();
**你的密码在这里**
结束=时钟();
浮动时钟=结束-开始;
cout
本文说,如果系统运行49.7天,GetTickCount的结果将变为零
这里可以找到:如何测量C++中的时间。
< P>可以使用Hyth.h头< /P>
并在代码中执行以下操作:
clock_t Start, Stop;
double sec;
Start = clock();
//call your BS function
Stop = clock();
Sec = ((double) (Stop - Start) / CLOCKS_PER_SEC);
并打印sec
我希望这对您有所帮助!您的代码如下所示:
int main()
{
// Some code...
while (some_condition)
{
// Some more code...
// Print timing result
return 0;
}
}
这就是为什么您的代码打印时间为零,您只需执行一次循环,然后退出程序。二进制搜索的复杂性是log2(N),对于N=10000000
,它大约是23
。
我认为这还不足以实时测量,甚至是时钟。
在这种情况下,应该使用unsigned long\uu rdtsc()
,返回上次重置后的处理器计时数。将此设置放在二进制搜索前后,然后放置难道您不需要循环来填充数据或设置最终。可以轻松计算最终的值,并初始化数据您可以使用。至于您的问题,我建议d计算花括号并检查缩进。或者删除return
语句(依赖隐式编译器生成的return语句),然后再次运行以查看发生了什么。或者在调试器中单步执行代码(这应该是您的第一反应)。最好使用DWORD作为GetTickCount文档,其中提到编辑代码以反映最终无循环,但如果使用std::iota,我得到的错误是“iota”不是“std”的成员,它是操作系统特定的。对于C++11,请参阅
标题使用了您的方法,但我仍然得到0秒。添加d时钟对象,它可能支持我们帮助您。@ArunKumarUsed您的方法,但我仍然有0秒。