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秒。