二分查找模板

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int a[1000100];
int search(int left,int right,int v)
{
    int mid=(left+right)/2;
    if(left>right) return -1;
    if(a[mid]==v) return mid;
    else if(a[mid]<v) return search(mid+1,right,v);
    else  return search(left,mid-1,v);
}
int main()
{
    int num,l;
    cin>>num>>l;
    for(int i=1;i<=num;i++)
        cin>>a[i];
        sort(a+1,a+num+1);
        cout<<search(0,num,l)<<endl;
    return 0;
}

时间: 2024-11-13 08:07:19

二分查找模板的相关文章

二分查找 模板

1 int bsearch(int l, int h, int k)//二分查找函数 2 { 3 int i, mid; 4 5 while(l<=h){ 6 mid = l+(h-l)/2; 7 if(X[mid]>k) 8 h = mid-1; 9 else if(X[mid]<k) 10 l = mid+1; 11 else 12 break; 13 } 14 return mid; 15 } 1 int max_bsearch(int l, int h, int k)//求上界

二分——二分查找算法模板

转自:二分查找算法模板 二分模板一共有两个,分别适用于不同情况.算法思路:假设目标值在闭区间[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;

二分查找、三分查找求极点、二分求等比数列【模板】

二分查找: int a[110],N; int BinarySearch(int *a,int x) { int Left = a[1]; int Right = a[N]; while(Left <= Right) { int mid = (Left+Right)>>1; if(a[mid] == x) return mid; else if(a[mid] > x) Right = mid - 1; else Left = mid + 1; } return -1; } 三分查找

【模板】二分查找

二分查找就是指对于一个有序数列,取其中间值,与要查找的值比较,若大于,则舍弃右半部分序列,若小于则舍弃左半部分序列,其复杂度是O(logn)的.二分查找看似简单,但到处都说要想不出错很难. inline int search(int *arr,int size,int key) { //内联查找函数,参数为序列数组,数组大小及查找的值     int left=0,right=size; //定义整型变量left置为0,right置为size     int mid; //定义整型变量mid  

【转】你真的会二分查找吗?

转自:http://blog.csdn.net/int64ago/article/details/7425727 红色字体为我对此转载文章的批注 看到这个标题无论你是处于怎样的心理进来看了,我觉得都是值得的.因为这个问题太简单,任何一个开始接触"真正"算法基本都是从二分查找开始的.至于二分查找都不知道是什么的可以先去找别的资料看下,再来看这篇文章.既然很简单,那么我们开始一起写一个吧,要求是对num[]={1,2,2,4,4,8,10}不减序列在区间[0,7)进行查找,当然我们得首先保

(转载)你真的会二分查找吗?

原文地址 :http://blog.csdn.net/int64ago/article/details/7425727 看到这个标题无论你是处于怎样的心理进来看了,我觉得都是值得的.因为这个问题太简单,任何一个开始接触“真正”算法基本都是从二分查找开始的.至于二分查找都不知道是什么的可以先去找别的资料看下,再来看这篇文章.既然很简单,那么我们开始一起写一个吧,要求是对num[]={1,2,2,4,4,8,10}不减序列在区间[0,7)进行查找,当然我们得首先保证要查找的数e满足:num[0] <

养成良好的编程风格--论二分查找的正确姿势

摘自:http://www.cnblogs.com/ider/archive/2012/04/01/binary_search.html 在学习算法的过程中,我们除了要了解某个算法的基本原理.实现方式,更重要的一个环节是利用big-O理论来分析算法的复杂度.在时间复杂度和空间复杂度之间,我们又会更注重时间复杂度. 时间复杂度按优劣排差不多集中在: O(1), O(log n), O(n), O(n log n), O(n2), O(nk), O(2n) 到目前位置,似乎我学到的算法中,时间复杂度

杭电 1025 Constructing Roads In JGShining&#39;s Kingdom(二分查找)

http://acm.hdu.edu.cn/showproblem.php?pid=1025 Constructing Roads In JGShining's Kingdom Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 15515    Accepted Submission(s): 4412 Problem Descriptio

二分查找总结及部分Lintcode题目分析 1

进行二分查找课程回顾与总结,包括以下几个方面,二分法的模板总结和解题思路.应用. 二分法模板总结classical binary search: 1. 必须要做的排除极端情况,也就是数组(用A表示)不存在即A == None或者 A为空,即len(A) == 0 的情况. 2. 二分法核心找的是mid值,并判断这个mid是否跟我们要找的target一致,或者和target之间的关系,所以要先判断start和end.为start和end赋值,start = 0, end = len(A) - 1