二分查找

来源:互联网 发布:php抽象类可以实例化吗 编辑:程序博客网 时间:2024/04/29 06:14

二分查找是一个时间复杂度为logn的算法。
它主要是从一个有序的数组中查找某一个数字是否在其中
算法分析:
一切尽在代码中。
附上

#include<iostream>#include<algorithm>using namespace std;int a[1000];int n;int x;int find(int l,int r){    int mid=(l+r)/2;//取带查找的区间的中间点     if(a[mid]==x)//如果中间对应的数字是要查找的数字,输出Yes,结束程序。     {        cout<<"Yes";        return 0;    }    if(l>r)//如果当前的左端点的下标大于右端点的下标,则代表没有找到,至于为什么见下方。     {        cout<<"No";        return 0;     }    if(x<a[mid])//如果当前要查找的数字比中间点所对应的数字小,则查找由l到mid-1的区间。                //因为mid所对应的数字已经和x比对过,是比x小,所以取mid-1。                //回答第15行的问题,因为当查找到区间左端点和右端点重合时,中间点就是这个点,所以                //如果中间点的值不于x相等话,那么,不论是查找mid-1还是mid+1,都会出现左端点的下标大于右端点的下标,                //此时就是没有找到。     find(l,mid-1);    else    find(mid+1,r);}int main (){    cin>>n;    for(int i=1;i<=n;i++)    cin>>a[i];    sort(a+1,a+1+n);//对要查找的数组进行排序。     cin>>x;// 要查找的数字     find(1,n);     return 0;}
0 0
原创粉丝点击