计算二进制搜索的运行时间

时间:2016-01-24 20:04:24

标签: c++

以下二进制搜索程序使用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;   
}

5 个答案:

答案 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中的索引从0size - 1,因此没有data[max]元素。

在调用return之前delete [] data;