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获取分类名称.根据关键 ...
随机推荐
- 树上莫比乌斯反演+分层图并查集——cf990G
/* 树上莫比乌斯反演 求树上 满足 d|gcd(au,av) gcd(au,av)的对数f(d) 如何求: 建立200000层新图,即对于每个数建立一个新图 在加边时,给gcd(au,av)的约数层 ...
- (转)OC学习笔记 @property的属性 strong 和 weak 理解
在ObjectiveC里,用@property访问所有的实例变量.@property有一对属性:strong 和 weak.官方文档里的解释晦涩难懂:Stack Overflow里的用户RDC (ht ...
- LeetCode 707. Design Linked List (设计链表)
题目标签:Linked List 题目让我们自己设计一个 linked list,可以是单向和双向的.这里选的是单向,题目并不是很难,但要考虑到所有的情况,具体看code. Java Solution ...
- mybatis浅显认识
mybatis主配置文件: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configu ...
- React:styled-components
``是es6的Template Literals(模版字符串),许多人对这个一知半解,今天在这边总结下: `${expression}`(表达式插补) var x; var y; sth.innerH ...
- 跳一跳外挂的python实现--OpenCV步步精深
去我的个人网站看看吧 http://opencvblog.com/跳一跳外挂-python实现/ 都在这里啦
- _IRP struct
Windows XP x86 +0x000 Type : Int2B +0x002 Size : Uint2B +0x004 MdlAddress : Ptr32 _MDL +0x000 Next : ...
- log4j学习(二) 高并发logback
logback中常用的appender有ch.qos.logback.core.ConsoleAppender和ch.qos.logback.core.rolling.RollingFileAppen ...
- 移动端dialog组件
移动端dialog组件 dialogView是满足移动端下,用户自定义的dialog组件,API可扩展性强,使用便捷.现版本是基于jquery库编写的,在使用之前需要引入jquery库或者Zepto库 ...
- (转)lua protobuffer的实现
转自: http://www.voidcn.com/article/p-vmuovdgn-bam.html (1)lua实现protobuf的简介 需要读者对google的protobuf有一定的了解 ...