查找算法:C++顺序查找、二分查找,代码、性能对比

顺序查找没有什么限制条件。
二分查找条件:1、数据是有序的。2、能够随机访问,例如数组,链表就不行了
下面程序对比了在一个有序数组中查找效率

#include
#include
#include

using namespace std;

int main()
{
    const int N=100000;
    vector<int> VEC(N,0);
    //构造一个顺序数组 1-N
    for(int i=0;i<N;i++)
    {
        VEC[i]=i+1;
    }

    int look;  //要查找的数字

    double time1=0, time2=0;
    chrono::steady_clock::time_point t1;
    chrono::steady_clock::time_point t2;
    chrono::duration<double> time_used;

    for(int k=0;k<N+5;k=k+2)
    {
        t1 = chrono::steady_clock::now();
        look = k;
        int i=0;
        //顺序查找
        for(;i<N;i++)
        {
            if(VEC[i]==look)
            {
                // cout<
                break;
            }
        }
        if(i==N)
            cout<<"顺序查找没有"<<look<<endl;
        t2 = chrono::steady_clock::now();
        time_used = chrono::duration_cast<chrono::duration<double>>(t2-t1);
        time1+=time_used.count();
    }

    for(int k=0;k<N+5;k=k+2)
    {
        t1 = chrono::steady_clock::now();
        look=k;

        //二分查找!!!!!!!!!!!!!!!
        int start=0, end=N-1;  //开始时候的索引 0 - (N-1)
        int mid;  //中间索引
        while(start<=end)
        {
            mid=start+(end-start)/2;
            if(VEC[mid]==look)
            {
                // cout<
                break;
            }
            else if(VEC[mid]>look)  //在左边
            {
                end=mid-1;
                continue;
            }
            else
            {
                start=mid+1;
                continue;
            }
        }
        if(start>end)
            cout<<"二分查找没有"<<look<<endl;
        t2 = chrono::steady_clock::now();
        time_used = chrono::duration_cast<chrono::duration<double>>(t2-t1);
        time2+=time_used.count();
    }

    cout<<"顺序查找耗时 time1 = "<<time1<<endl;
    cout<<"二分查找耗时 time2 = "<<time2<<endl;

    return 0;
}

结果显示:说明二分查找效率明显高很多

顺序查找没有0
顺序查找没有100002
顺序查找没有100004
二分查找没有0
二分查找没有100002
二分查找没有100004
顺序查找耗时 time1 = 1.85711
二分查找耗时 time2 = 0.00390891

你可能感兴趣的:(数据结构与算法,算法)