精典算法之二分查找法

简介:

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

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

下边我会用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月前
|
存储 算法 索引
【优选算法】—— 二分查找
【优选算法】—— 二分查找
|
1月前
|
算法 程序员 数据处理
算法与人生 揭秘C语言中高效搜索的秘诀——二分查找算法详解
算法与人生 揭秘C语言中高效搜索的秘诀——二分查找算法详解
|
2月前
|
人工智能 算法 测试技术
【动态规划】【二分查找】C++算法 466 统计重复个数
【动态规划】【二分查找】C++算法 466 统计重复个数
|
3月前
|
算法 测试技术 C#
【KMP】【二分查找】【C++算法】100207. 找出数组中的美丽下标 II
【KMP】【二分查找】【C++算法】100207. 找出数组中的美丽下标 II
|
3月前
|
算法 测试技术 C#
C++二分查找算法:包含每个查询的最小区间
C++二分查找算法:包含每个查询的最小区间
|
4月前
|
算法 JavaScript 前端开发
JavaScript算法和数据结构:写一个二分查找的函数。
JavaScript算法和数据结构:写一个二分查找的函数。
32 0
|
3月前
|
存储 算法 Java
【算法系列篇】二分查找——这还是你所知道的二分查找算法吗?
【算法系列篇】二分查找——这还是你所知道的二分查找算法吗?
|
25天前
|
算法 索引
算法思想总结:二分查找算法
算法思想总结:二分查找算法
|
2月前
|
机器学习/深度学习 算法 Java
【数据结构查找算法篇】----二分查找【实战项目】
【数据结构查找算法篇】----二分查找【实战项目】
24 1
|
2月前
|
算法 测试技术 C++
【KMP】【二分查找】【C++算法】100207. 找出数组中的美丽下标 II
【KMP】【二分查找】【C++算法】100207. 找出数组中的美丽下标 II