SUMMARY | 二分查找
package Search;
public class biSearch {
//标准的二分查找
public static int stdBiSearch(int[] array,int keyValue) {
int length=array.length;
int left=0,right=length-1;
while(left<=right){
int mid=(left+right)/2;
if(keyValue<array[mid]) right=mid-1;
else if(keyValue>array[mid]) left=mid+1;
else return mid;
}
return -1;
}
//(二分法)查找第一个小于keyValue的元素
public static int BiSearchToFindFirstSmaller(int[] array,int keyValue) {
int length=array.length;
int left=0,right=length-1;
while(left<=right){
int mid=(left+right)/2;
if(keyValue<=array[mid]) right=mid-1;
else left=mid+1;
}
return right;
}
//(二分法)查找第一个大于等于keyValue的元素
public static int BiSearchToFindFirstBiggerorEqual(int[] array,int keyValue) {
int length=array.length;
int left=0,right=length-1;
while(left<=right){
int mid=(left+right)/2;
if(keyValue<=array[mid]) right=mid-1;
else left=mid+1;
}
return left;
}
//(二分法)查找第一个最后一个小于等于keyValue的元素
public static int BiSearchToFindLastSmallerorEqual(int[] array,int keyValue) {
int length=array.length;
int left=0,right=length-1;
while(left<=right){
int mid=(left+right)/2;
if(keyValue<array[mid]) right=mid-1;
else left=mid+1;
}
return right;
}
//(二分法)查找第一个第一个大于keyValue的元素
public static int BiSearchToFindFirstBigger(int[] array,int keyValue) {
int length=array.length;
int left=0,right=length-1;
while(left<=right){
int mid=(left+right)/2;
if(keyValue<array[mid]) right=mid-1;
else left=mid+1;
}
return left;
}
//(二分法)查找第一个第一个等于keyValue的元素
public static int BiSearchToFindFirst(int[] array,int keyValue) {
int length=array.length;
int left=0,right=length-1;
while(left<=right){
int mid=(left+right)/2;
if(keyValue<=array[mid]) right=mid-1;
else left=mid+1;
}
//array[right]<keyValue<=array[left]
if(left<length&&array[left]==keyValue) return left;
else return -1;
}
//(二分法)查找第一个最后一个等于keyValue的元素
public static int BiSearchToFindLast(int[] array,int keyValue) {
int length=array.length;
int left=0,right=length-1;
while(left<=right){
int mid=(left+right)/2;
if(keyValue<array[mid]) right=mid-1;
else left=mid+1;
}
//array[right]<=keyValue<array[left]
if(right>=0&&array[right]==keyValue) return right;
else return -1;
}
//测试样例
public static void main(String[] args) {
int[] a=new int[]{0,1,2,2,2,5,6};
System.out.println(BiSearchToFindLast(a, 2));
}
}
一张图帮助理解:

参考博客地址:https://www.cnblogs.com/bofengyu/p/6761389.html
SUMMARY | 二分查找的更多相关文章
- c#-二分查找-算法
折半搜索,也称二分查找算法.二分搜索,是一种在有序数组中查找某一特定元素的搜索算法. A 搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束: B 如果某一特定元素大于或者小 ...
- C#二分查找算法设计实现
C#二分查找算法设计实现 1.介绍 二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法.但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列.(记住了 ...
- 最新IP地址数据库 二分逼近&二分查找 高效解析800万大数据之区域分布
最新IP地址数据库 来自 qqzeng.com 利用二分逼近法(bisection method) ,每秒300多万, 比较高效! 原来的顺序查找算法 效率比较低 readonly string i ...
- jvascript 顺序查找和二分查找法
第一种:顺序查找法 中心思想:和数组中的值逐个比对! /* * 参数说明: * array:传入数组 * findVal:传入需要查找的数 */ function Orderseach(array,f ...
- Java实现的二分查找算法
二分查找又称折半查找,它是一种效率较高的查找方法. 折半查找的算法思想是将数列按有序化(递增或递减)排列,查找过程中采用跳跃式方式查找,即先以有序数列的中点位置为比较对象,如果要找的元素值小 于该中点 ...
- 从一个NOI题目再学习二分查找。
二分法的基本思路是对一个有序序列(递增递减都可以)查找时,测试一个中间下标处的值,若值比期待值小,则在更大的一侧进行查找(反之亦然),查找时再次二分.这比顺序访问要少很多访问量,效率很高. 设:low ...
- java实现二分查找
/** * 二分查找 * @param a * @param n * @param value * @return * @date 2016-10-8 * @author shaobn */ publ ...
- 【Python】二分查找算法
二分查找:在一段数字内,找到中间值,判断要找的值和中间值大小的比较.如果中间值大一些,则在中间值的左侧区域继续按照上述方式查找.如果中间值小一些,则在中间值的右侧区域继续按照上述方式查找.直到找到我们 ...
- PHP实现文本快速查找 - 二分查找
PHP实现文本快速查找 - 二分查找法 起因 先说说事情的起因,最近在分析数据时经常遇到一种场景,代码需要频繁的读某一张数据库的表,比如根据地区ID获取地区名称.根据网站分类ID获取分类名称.根据关键 ...
随机推荐
- kafka-manager监控工具的安装和使用
kafka-manager监控工具的使用 第一步:对kafkamanager进行下载并编译 此步骤略:可参照成功与否不详,https://www.jianshu.com/p/174b6eb10d9d ...
- NX二次开发-UFUN获取相邻面UF_MODL_ask_adjac_faces
NX9+VS2012 #include <uf.h> #include <uf_obj.h> #include <uf_modl.h> UF_initialize( ...
- params拦截器
1. params拦截器首先给action中的相关参数赋值,如id 2. prepare拦截器执行prepare方法,prepare方法中会根据参数,如id,去调用业务逻辑,设置model对象 ...
- Greenplum(PostgreSql)使用 with recursive 实现树形结构递归查询并插入新表
本代码目的是替代Oracle的connect by语句,并实现后者的path和idleaf功能. 正文开始: 假设表org,字段有 id(编号),name(名称),pid(上级编号), 最上级的记录p ...
- 'ddkbuild.cmd' 不是内部或外部命令,也不是可运行的程序
转自VC错误:http://www.vcerror.com/?p=49 问题描述: 错误:'ddkbuild.cmd' 不是内部或外部命令,也不是可运行的程序 解决方法: 详细的解决方法可参考VC错误 ...
- ElasticSearch 索引查询使用指南
1.检测集群是否健康,我们通常用下面的命令.确保9200端口号可用: http://localhost:9200/_cat/health?v 或者 http://localhost:9200/_clu ...
- 安装mongo
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/weixin_40101530/articl ...
- 【洛谷】P1962
题目链接:https://www.luogu.org/problemnew/show/P1962 题意:求fib数列的第n项,很大.mod 1e9+7. 题解:BM直接推. 代码: #include ...
- java笔试之字符串加密
有一种技巧可以对数据进行加密,它使用一个单词作为它的密匙.下面是它的工作原理:首先,选择一个单词作为密匙,如TRAILBLAZERS.如果单词中包含有重复的字母,只保留第1个,其余几个丢弃.现在,修改 ...
- SQL SERVER 2008R2 执行大脚本文件时,提示“内存不足”的解决办法
我把一个数据库的架构及数据都已脚本的方式拷贝下来,再去新建一个数据库想把脚本执行一下,但提示如下错误: 问题描述: 当客户服务器不允许直接备份时,往往通过导出数据库脚本的方式来部署-还原数据库, 但是 ...