【模板】二分查找

二分查找就是指对于一个有序数列,取其中间值,与要查找的值比较,若大于,则舍弃右半部分序列,若小于则舍弃左半部分序列,其复杂度是O(logn)的。二分查找看似简单,但到处都说要想不出错很难。

inline int search(int *arr,int size,int key) { //内联查找函数,参数为序列数组,数组大小及查找的值
    int left=0,right=size; //定义整型变量left置为0,right置为size
    int mid; //定义整型变量mid
    while(left<right) { //只要left小于right,就循环
        mid=(left+right)>>1; //mid赋值为(left+right)>>1,即(left+right)/2
        if(arr[mid]<key) left=mid+1; //如果arr[mid]小于key,left赋值为mid+1
        else right=mid; //否则right赋值为mid
    }
    return left; //返回left
}
注:以上来自2017浴谷夏令营讲义

时间: 2024-11-07 23:59: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; } 三分查找

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

转自: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

二分查找的实现和应用汇总(转载)

转载地址: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) 到目前位置