zoukankan      html  css  js  c++  java
  • 二分搜索的基本相关问题

    二分搜索的基本相关问题

    二分查找是基于分治思想的一种算法,所谓分治思想就是将一些规模很大难于直接解决的问题,缩小为一个较小的问题就很容易解决的思想,(当然它的子问题仍可以继续分解为相同的子问题)。归结为一句话就是:“以大化小,各个击破,分而治之,组合取果”。

    二分查找作为一种高效的查找算法,是解决一些有序序列查找的不二之选。但他的缺点也就是使用于有序的数组,有一定的局限性。但二分在一些高效的程序设计中往往被用作优化的利器。因此,熟练应用二分查找是必须的。

    二分查找的实现:比如有一列数从1100,已经排好序,我们要查找25,按照传统的逐个遍历,需要查找25次,而采用二分查找的方法,首先那25和这组数列的中间的数做比较50,结果查找数小于中间数,所以区间【50-100】的数就可以舍弃了,然后查找范围就缩减为了【1-49】,接下来仍然那25和查找区间的中间数25做比较,显然这样已经查找到了,这样只需要2次就查找到了,而普通的查找方法需要25次。

    假设其数组长度为n,其算法复杂度为o(log(n)),灰常高效。

     

    【二分算法的非递归实现】

    这个可能就是C++STL库中的那个。

    复制代码
     1 int BinarySearch(int a[],int n,int x)//a[]待查找数组 n查找范围 x被查找数  
     2 {
     3     int low=0;//查找区间 起点
     4     int high=n-1;//查找区间 终点
     5     while(low<=high)
     6     {
     7         int mid=(low+high)/2;
     8         if(x==a[mid])//如果查找成功  返回其下标
     9             return mid;
    10         else if(x>a[mid])
    11              low=mid+1;
    12         else if(x<a[mid])
    13              high=mid-1;
    14     }
    15     return -1;//查找失败
    16 }
    复制代码

    【STL中的binary_search】

    当然,如果是纯粹的二分搜索,可以直接调用algorithm中的二分搜索函数,上面的就都省了。、

    强大的C++标准模板库中提供有二分查找函数,直接调用可以节省时间:

    binary_search(num,num+n,key);

    这里的参数num指查找序列(已经排过序),num-num+n指查找范围,key指待查找的值。

    如果查找成功则返回true,否则返回false。

     

     

    【二分搜索的递归实现】

    复制代码
     1 int BinarySearch(int a[],int x,int low,int high)//a[]待查找数组 low/high查找范围 x被查找数  
     2 {
     3     if(low>high)  return -1;
     4 
     5         int mid=(low+high)/2;
     6         if(x==a[mid])//如果查找成功  返回其下标
     7             return mid;
     8         else if(x>a[mid])
     9              BinarySearch(a,x,mid+1,high);
    10         else if(x<a[mid])
    11              BinarySearch(a,x,low,mid-1);
    12     
    13 }
    复制代码

    二分作为一种基本的算法,在程序设计题中往往不会单独用到,而更像是一种工具,常用作一些问题的优化。

     
     
     
    标签: 二分查找
  • 相关阅读:
    543. Diameter of Binary Tree
    1519. Number of Nodes in the Sub-Tree With the Same Label
    WinCMD CMDKEY
    Delphi TDataSet
    Delphi DBGrid 实现多选和获取多选的值
    Access 错误: Data type mismatch in criteria expression
    Delphi Timage 介绍和操作[1](图片判断、清空、类型)
    Delphi WinAPI CopyFile、CopyFileEx、CopyFileTransacted -复制文件
    Delphi 图片转换(jpg、bitmap、png、gif)
    WinCMD NET USE 命令
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3041746.html
Copyright © 2011-2022 走看看