zoukankan      html  css  js  c++  java
  • binary_search

    二分模板一共有两个,分别适用于不同情况。

    from 大雪菜--https://www.acwing.com/blog/content/31/

    算法思路:假设目标值在闭区间[l, r]中, 每次将区间长度缩小一半,当l = r时,我们就找到了目标值。

    版本1

    """当我们将区间[l, r]划分成[l, mid]和[mid + 1, r]时,其更新操作是r = mid或者l = mid + 1;,计算mid时不需要加1。
    C++ 代码模板:

    int bsearch_1(int l, int r)
    {
        while (l < r)
        {
            int mid = l + r >> 1;
            if (check(mid)) r = mid;
            else l = mid + 1;
        }
        return l;
    }
    

    版本2

    当我们将区间[l, r]划分成[l, mid - 1]和[mid, r]时,其更新操作是r = mid - 1或者l = mid;,此时为了防止死循环,计算mid时需要加1。

    C++ 代码模板:

    int bsearch_2(int l, int r)
    {
        while (l < r)
        {
            int mid = l + r + 1 >> 1;
            if (check(mid)) l = mid;
            else r = mid - 1;
        }
        return l;
    }
    

    blue-bridge-binary-search

    #include <iostream>
    #define SIZE 10
    using namespace std;
    int binary_search (int sorted_array[], int first, int last, int key)
    {
    /**********Program**********/
     
    	
    	while(first<last)
    	{
    		
    		int mid=first+last>>1;
    	 
    		if(sorted_array[mid]>key)last=mid;
    		
    		else if(sorted_array[mid]==key) return mid;
    		else first=mid+1;
    	}
    
    	return -1;
      
    /**********  End  **********/
    }
    
    int main()
    {
         int arr[SIZE];int key;
           for(int i=0;i<SIZE;i++)
             cin>>arr[i];
           cin>>key;
           cout<<binary_search ( arr, 0, SIZE-1, key);
      return 0;
    }
    
    #include <iostream>
    #include<algorithm> 
    #define SIZE 10
    using namespace std;
    int binary_search (int sorted_array[], int first, int last, int key)
    {
    /**********Program**********/
     
      	 
    	int c=lower_bound(sorted_array,sorted_array+last-first+1,key)-sorted_array;
         if(c==0 ||c==last-first+1)return -1;
         else return c;
     
    /**********  End  **********/
    }
    
    int main()
    {
         int arr[SIZE];int key;
           for(int i=0;i<SIZE;i++)
             cin>>arr[i];
           cin>>key;
         cout<<binary_search ( arr, 0, SIZE-1, key);
             
            
      
     
    
     
      return 0;
    }
    
  • 相关阅读:
    week4:周测错题
    小程序1:登录/注册小程序
    小程序2:实现一个购物车
    day26:装饰器&面向对象当中的方法&property
    day25:7个魔术方法&5个关于类的魔术属性
    day24:多态&魔术方法__new__&单态模式
    day23:单继承&多继承&菱形继承&__init__魔术方法
    day22:面向对象封装对象操作&类操作&面向对象删除操作
    day21:正则函数&模块和包(import)
    APP探索之iAPP
  • 原文地址:https://www.cnblogs.com/shenxiaodou/p/12519185.html
Copyright © 2011-2022 走看看