精典算法之二分查找法

简介:

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

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

下边我会用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,如需转载请自行联系原作者

相关文章
|
8天前
|
算法 索引
【算法】——二分查找合集
二分查找基础模版和进阶模版,查找元素位置,搜索插入位置,x的平方根,山脉数组的峰顶索引,寻找峰值,点名
|
5月前
|
算法
【算法】二分查找——在排序数组中查找元素的第一个和最后一个位置
【算法】二分查找——在排序数组中查找元素的第一个和最后一个位置
|
3月前
|
算法 C# 索引
C#二分查找算法
C#二分查找算法
|
3月前
|
存储 算法 C语言
【C语言】二分查找算法
【C语言】二分查找算法
|
3月前
|
消息中间件 存储 算法
一文搞懂二分查找算法!
一文搞懂二分查找算法!
139 0
|
3月前
|
算法 Java 索引
数据结构与算法学习十五:常用查找算法介绍,线性排序、二分查找(折半查找)算法、差值查找算法、斐波那契(黄金分割法)查找算法
四种常用的查找算法:顺序查找、二分查找(折半查找)、插值查找和斐波那契查找,并提供了Java语言的实现代码和测试结果。
37 0
|
5月前
|
存储 算法 Java
深入算法基础二分查找数组
文章深入学习了二分查找算法的基础,通过实战例子详细解释了算法的逻辑流程,强调了确定合法搜索边界的重要性,并提供了Java语言的代码实现。
深入算法基础二分查找数组
|
6月前
|
算法
【算法】二分查找(整数二分和浮点数二分)
算法学习——二分查找(整数二分和浮点数二分)
50 0
【算法】二分查找(整数二分和浮点数二分)
|
5月前
|
算法
【算法】二分查找——二分查找
【算法】二分查找——二分查找
|
7月前
|
存储 算法 C语言
二分查找算法的概念、原理、效率以及使用C语言循环和数组的简单实现
二分查找算法的概念、原理、效率以及使用C语言循环和数组的简单实现

热门文章

最新文章