zoukankan      html  css  js  c++  java
  • 二分查找

    一:二分查找定义:

    二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。
    首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。 ——百度百科

    二:二分查找基本操作:

    1、找到该值在数组中的下标

    inline int find1(int *a, int x) {
      int l=1,r=n;
      while(l<=r) {
        int mid=(l+r)>>1;
        if(a[mid]==x) return mid;
        else if(a[mid]<x) l=mid+1;
        else r=mid-1;
      }
      return -1;
    }
    

    2、查找第一个与(x)相等的元素在数组中下标

    inline int find2(int *a, int x) {。 
      int l=1,r=n;
      while(l<=r) {
    	int mid=(l+r)>>1;
    	if(a[mid]>=x) r=mid-1;
    	else l=mid+1;
    	if(l<=n&&a[l]==x) return l;
      }
      return -1;
    }
    

    3、查找最后一个与(x)相等的元素在数组中下标

    inline int find3(int *a, int x) { 
      int l=1,r=n;
      while(l<=r) {
    	int mid=(l+r)>>1;
    	if(a[mid]<=x) l=mid+1;
    	else r=mid-1;
    	if(r>=1&&a[r]==x) return r;	
      }	
      return -1;
    }
    

    4、查找最后一个小于(x)的元素下标

    inline int find4(int *a,int x) { 
      int l=1,r=n;
      while(l<=r) {
    	int mid=(l+r)>>1;
    	if(a[mid]>=x) r=mid-1;
    	else l=mid+1;
      }
      return r;
    } 
    //查找最后一个小于x的元素,也就是说返回小于x的最右边元素下标。
    

    5、查找第一个大于等于(x)的元素下标

    inline int find5(int *a,int x) { 
      int l=1,r=n;
      while(l<=r) {
    	int mid=(l+r)>>1;
    	if(a[mid]>=x) r=mid-1;
    	else l=mid+1;
      }	
      return l;
    }
    //查找第一个等于或者大于x的元素,也就是说等于查找x值的元素有好多个
    //返回这些元素最左边元素下标如果没有等于x值的元素,则返回大于x的最左边元素下标。
    

    6、查找第一个大于(x)的元素下标

    inline int find6(int *a,int x) {
      int l=1,r=n;
      while(l<=r) {
    	int mid=(l+r)>>1;
    	if(a[mid]>x) r=mid-1;
    	else l=mid+1;
      }
      return l;
    }
    

    有写错的地方欢迎纠正,有什么不懂的地方可以留言问我 (QwQ)~

  • 相关阅读:
    [Javascript] Use a custom sort function on an Array in Javascript
    [Unit Testing] Fundamentals of Testing in Javascript
    [WASM] Create a New Rust/Webpack Project using the rust-webpack Template
    [Adobe Analytics] Segments types
    win7系统远程连接其它计算机,并且向远程机传输文件
    移动应用数据统计分析平台汇总
    设计模式(策略模式)
    程序员与卓别林
    我的Android进阶之旅------>HTTP 返回状态值详解
    OSX: 真的吗?Mac OS X重大漏洞 改时钟获系统最高权限
  • 原文地址:https://www.cnblogs.com/grcyh/p/10127312.html
Copyright © 2011-2022 走看看