精典算法之二分查找法

简介:
+关注继续查看

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

 二分查找法是已经排好顺序的集合,要从集合的中间开始查找,如果这个项小于我们要查找的数,则这个项前边的所有数都小于我们要查找的对象
 就无需再浪费时间去查在前边的数查找;如果搜寻的数天于我们要查找的对象那么这个数的后边的数都大于我们要查找的对象,则后边的数我们也不用再去查找了。

下边我会用c#和c++两种语言给出代码

c#二分查找代码

static void Main(string[] args)
       {
           int[] _array={ 1,3,5,6,10,14,16,20,21,23,28};
           int _findValue = BinSearch(_array, 0, _array.Length, 3);
           if (_findValue == -1)
           {
               Console.WriteLine("not find");
           }
           else
           {
               Console.WriteLine("find the value at " + _findValue);
           }
           Console.ReadLine();
       }
 
       static int BinSearch(int[] _array, int start, int end, int key)
       {
           int left, right;
           int mid;
           left = start;
           right = end;
 
           while (left <= right)
           {
               mid = (left + right) / 2;
 
               if (key < _array[mid])
               {
                   right = mid - 1;
               }
               else if (key > _array[mid])
               {
                   left = mid + 1;
               }
               else
                   return mid;
           }
           return -1;
       }

  

c++二分查找代码

int BinSearch(const int* Array,int start,int end,int key)
{
    int left,right;
    int mid;
    left=start;
    right=end;
     
    while(left<=right)
    {
        mid = (left + right)/2;
 
        if(key < Array[mid])
        {
            right = mid - 1;
        }
        else if(key > Array[mid])
        {
            left = mid + 1;
        }
        else
            return mid;
    }
    return -1;
}
 
int main(int argc,char* argv[])
{
    int _array[11] ={ 1,3,5,6,10,14,16,20,21,23,28};
 
    int _findInt =BinSearch( _array,0,(sizeof _array)/(sizeof _array[0]),3);
    if(_findInt == -1)
    {
        cout<<"not find"<<endl;
    }
    else
    {
        cout<<"find the Value at  "<<_findInt<<endl;
    }
     
     return 0;
}

  本文转自lpxxn博客园博客,原文链接:http://www.cnblogs.com/li-peng/p/3300894.html,如需转载请自行联系原作者

相关文章
|
1天前
|
数据采集 存储 编解码
基于MUSIC算法的二维超声波成像matlab仿真
基于MUSIC算法的二维超声波成像matlab仿真
|
1天前
|
算法 定位技术
无线定位中TDOA时延估计算法matlab仿真
无线定位中TDOA时延估计算法matlab仿真
|
1天前
|
存储 算法 数据格式
基于LUT查找表方法的图像gamma校正算法FPGA实现,包括tb测试文件和MATLAB辅助验证
基于LUT查找表方法的图像gamma校正算法FPGA实现,包括tb测试文件和MATLAB辅助验证
|
1天前
|
存储 资源调度 算法
基于图像形态学处理和边缘提取算法的路面裂痕检测matlab仿真
基于图像形态学处理和边缘提取算法的路面裂痕检测matlab仿真
|
1天前
|
机器学习/深度学习 算法
基于深度学习网络的烟雾检测算法matlab仿真
基于深度学习网络的烟雾检测算法matlab仿真
|
2月前
|
算法 测试技术 Go
Go语言算法学习,从二分查找法开始最合适不过了
Go语言算法学习,从二分查找法开始最合适不过了
19 0
|
2月前
|
算法 Java
折半查找算法[二分查找法]算法的实现和解决整数溢出问题~
折半查找算法[二分查找法]算法的实现和解决整数溢出问题~
|
Java 算法
算法之二分查找法
在一个已知有序队列中找出与给定关键字相同的数的具体位置。原理是分别定义三个指针low、high、mid分别指向待查元素所在范围的下界和上界以及区间的中间位置,即mid=(low+high)/2,让关键字与mid所指的数比较,若等则查找成功并返回mid,若关键字小于mid所指的数则high=mid-1,否则low=mid+1,然后继续循环直到找出或找不到为止。
|
算法
死磕算法之二分查找法
版权声明:本文为博主原创文章,未经博主允许不得转载。博客源地址为zhixiang.org.cn https://blog.csdn.net/myFirstCN/article/details/80851013 ...
750 0
|
人工智能 算法 C++
【C/C++学院】0723-32位与64位/调戏窗口程序/数据分离算法/内存检索/二分查找法/myVC
<div> <h2> <span style="border-collapse:separate; font-family:'Times New Roman'; border-spacing:0px; font-size:14px"><span style="color:rgb(51,51,51); font-family:Helvetica,arial,freesans,clean,s
1792 0
相关产品
云迁移中心
推荐文章
更多