二分查找
时间:2019-03-19
本文章向大家介绍二分查找,主要包括二分查找使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
--------开始--------
二分查找算是分治法中的一种方法,二分查找的时间复杂度是O(log n),要想使用二分查找法需要必须的一个条件,序列必须是一个有序的序列,无论是递增的还是递减的序列都可以。
算法思路 :假设要查找的目标在有序序列 [ l, r ] 中,我们每次拿要查找的目标值和序列中间的值比较,每次序列缩短一半,当最后 l == r 时就找出来了目标值
对于有序序列 [ l, r ] ,二分算法模板有两种
1. 把序列 [ l, r ] ,分成 [ l, mid ] 和 [ mid + 1, r ] ,其后续需要更新的操作是 l = mid + 1 或者 r = mid 。
2. 把序列 [ l, r ],分成 [ l, mid - 1 ] 和 [ mid, r ] ,其后续需要更新的操作是 l = mid 或者 r = mid -1 。
//对于第二种模板我们需要在计算 mid 时要加 1,这是因为为了防止出现死循环
第一种模板
int bsearch(int l,int r)
{
int mid;
while(l < r)
{
mid = (l + r) / 2;
if(check)
l = mid + 1;
else
r = mid;
}
return l;
}
第二种模板
int bsearch(int l,int r)
{
int mid;
while(l < r)
{
mid = (l + r + 1) / 2;
if(check)
r = mid - 1;
else
l = mid;
}
return l;
}
两种模板具体使用哪种根据具体的情况确定使用那个模板,有时候不同的题目需要修改一下模板,灵活运用。
PS:
参考文章:https://www.acwing.com/blog/content/31/
--------结束--------
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法