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;
    }
    
  • 相关阅读:
    前端ajax传数据成功发送,但后端接收不到
    POST 400 (BAD REQUEST)
    chrome浏览器本地文件支持ajax请求的解决方法
    系统可能不会保存你所做的修改 onbeforeunload
    bootstrap 常用class(不定时更新)
    webstrom 一直反复indexing
    setInterval传递参数
    在CentOS 7上安装GitLab
    「Githug」Git 游戏通关流程
    分布式版本控制系统Git——图形化Git客户端工具TortoiseGit
  • 原文地址:https://www.cnblogs.com/shenxiaodou/p/12519185.html
Copyright © 2011-2022 走看看