二分查找/二分搜索(binary_search)详解

前提:

1.不考虑超大数据情况。

2.对于二分查找/搜索,要求待查表为有序表。

 

代码:

  1.递归方式: 

#include
using namespace std;
int binary_search(int a[],int h,int t,int value);
int main()
{
    int a[11]={0,1,2,3,4,5,6,7,8,9,10};
    int len=sizeof(a)/sizeof(a[0]);
    int result = binary_search(a,0,len-1,10);
    cout<t)
    {

        return -1;
    }

    int mid=(h+t)/2;

    if(valuea[mid]){
        binary_search(a,mid+1,t,value);
    }else{

        return mid;
    }

}

 

  2.非递归方式:

 

#include
using namespace std;
int search_binary(int a[],int low,int high,int value);
int main()
{
    int a[11]={0,1,2,3,4,5,6,7,8,9,10};
    int len=sizeof(a)/sizeof(a[0]);
    int result=search_binary(a,0,len-1,2);
    cout<a[middle])
        {
            low=middle+1;
        }else if(value


 

 

算法分析:

1.时间复杂度:

       从二分查找的过程来看,每次比较目标值和当前序列中间元素的值后,都会将当前序列一分为二,继续在分好的序列中查找。序列的变化其实就是一个二叉树的结构。在每一层上面,执行的比较操作都相同,消费时间设为C。 对于一个二叉树,深度为lgn+1。所以时间总量为:T(n)=Clgn+C。

       时间复杂度为:O(lgn)

2.用法解析:

       优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。

       

 

 

你可能感兴趣的:(算法(C/C++))