二分查找法的递归和非递归的实现

九路 等级 369 0 0
    //二分查找法非递归实现,在一个有序的数组中查找e元素的位置,找不到返回-1
    public static int binarySearch(int[] data,int e){
        int l = 0;
        int r = data.length - 1;

        while (l <= r){
            int mid = (l + r) / 2;

            if(e > data[mid]){
                l = mid + 1;
            }else if(e < data[mid]){
                r = mid - 1;
            }else {
                return mid;
            }

        }
        return -1;
    }
  //二分查找法的递归实现
    public static int binarySearchRecursion(int[] data,int l,int r,int e){
        int mid = (l + r) / 2;
        if(e > data[mid] ){
            return binarySearchRecursion(data,mid + 1,r,e);
        }else if(e < data[mid] ){
            return binarySearchRecursion(data,l,mid - 1,e);
        }else {
            return mid;
        }
    }
收藏
评论区

相关推荐

二分查找法的递归和非递归的实现
//二分查找法非递归实现,在一个有序的数组中查找e元素的位置,找不到返回1 public static int binarySearch(int data,int e){ int l 0; int r data.length 1; while (l < r){
Java多态实现原理
Java多态概述 多态是面向对象编程语言的重要特性,它允许基类的指针或引用指向派生类的对象,而在具体访问时实现方法的动态绑定。Java 对于方法调用动态绑定的实现主要依赖于方法表,但通过类引用调用(invokevirtual)和接口引用调用(invokeinterface)的实现则有所不同。 类引用调用的大致过程为:Java编译器将Java源代码编译成c
一文弄懂Java中String的所有小秘密
简介 String是java中非常常用的一个对象类型。可以说java中使用最多的就是String了。那么String到底有哪些秘密呢?接下来本文将会一一讲解。 String是不可变的 String是不可变的,官方的说法叫做immutable或者constant。 String的底层其实是一个Char的数组。 priv
java实现九九乘法表的输出
这是小学二年级令人难忘的坷如今以java程序的行式展示,真不戳! public class score{ public static void main(String args) { int i,j; for(i1;i<9;i) { for (j 1; j < 9; j
java 泛型详解-绝对是对泛型方法讲解最详细的,没有之一
java 泛型详解绝对是对泛型方法讲解最详细的,没有之一 对java的泛型特性的了解仅限于表面的浅浅一层,直到在学习设计模式时发现有不了解的用法,才想起详细的记录一下。 本文参考、、 1、概述泛型在java中有很重要的地位,在面向对象编程及各种设计模式中有非常广泛的应用。什么是泛型?
非常实用的GitHub项目
CoilCoil是Android上的一个全新的图片加载框架,它的全名叫做 coroutine image loader,即协程图片加载库。与传统的图片加载库Glide,Picasso或Fresco等相比。该具有轻量(只有大约1500个方法)、快、易于使用、更现代的API等优势。它支持GIF和SVG,并且可以执行四个默认转换:模糊,圆形裁剪,灰度和圆角。示例如
低开销获取时间戳
前言在前面文章中提了一句关于时间戳获取性能的问题 获取操作系统时间,在Java中直接调用 System.currentTimeMillis(); 就可以,但在Cobar中如果这么获取时间,就会导致性能损耗非常严重(怎么解决?去Cobar的github仓库上看看代码吧)。这个话题展开具体说说,我们在Java中获取时间戳的方法是System.currentTim
Java学习路线
阶段一 (夯实基础)Java基础语法学习目标:1.熟悉Java等基本概念2.掌握Eclipse/IDEA集成开发工具的安装、配置和应用3.熟悉Java基本语法、基本类型、运算符和表达式4.掌握分支、循环逻辑语句、数组等知识的应用知识点列表:JDK、JRE、JVM基本概念Java环境搭建和配置安装和使用Eclipse/IDEA开发环境Java基本数据类型变量,
Java开发学习路线,看完这篇就够了
Java 开发,我们应该从哪里开始学?应该学习哪些东西?应该按照什么样的顺序来学?Java 开发涉及到的领域非常多,对于开发者而言要掌握的东西也非常多,初入行的小伙伴甚至觉得这些要掌握的东西非常杂乱,其实不然!所有要学习的东西都是有内在关联的。大仙今天就来和大家捋一捋 Java 学习路线图,一起来看看都有哪些东西需要掌握,以及要按照什么样的顺序来学习。](h
Java开发面试高频考点学习笔记(每日更新)
Java开发面试高频考点学习笔记(每日更新) 1.深拷贝和浅拷贝 2.接口和抽象类的区别 3.java的内存是怎么分配的 4.java中的泛型是什么?类型擦除是什么? 5.Java中的反射是什么 6.序列化与反序列化 7.Object有哪些方法? 8.JVM内存模型 9.类加载机制 10.对象的创建和对象的布局 11.Java的四种引用
Java面试真题解析火爆全网,讲的太透彻了
8.15 一面 (60min) 自我介绍,为什么投客户端 python和java有什么区别 java内存模型 gc讲讲 http https区别 cookie,session https握手过程 对称非对称加密算法?哪个效率高? tcp握手要三次,挥手要几次,为什么 进程和线程,描述一下 进程通信方式 线程同步
JAVA回调机制(CallBack)之小红是怎样买到房子的??
JAVA回调机制CallBack 序言最近学习java,接触到了回调机制(CallBack)。初识时感觉比较混乱,而且在网上搜索到的相关的讲解,要么一言带过,要么说的比较单纯的像是给CallBack做了一个定义。当然了,我在理解了回调之后,再去看网上的各种讲解,确实没什么问题。但是,对于初学的我来说,缺了一个循序渐进的过程。此处,将我对回调机制的个人理解,按
BAT这种大厂履历意味着什么?面试篇
8.15 一面 (60min) 自我介绍,为什么投客户端 python和java有什么区别 java内存模型 gc讲讲 http https区别 cookie,session https握手过程 对称非对称加密算法?哪个效率高? tcp握手要三次,挥手要几次,为什么 进程和线程,描述一下 进程通信方式 线程同步
MySQL系列:2021Java高级进阶学习资料
阶段一:筑基 Java基础掌握不牢,对于一个开发人员来说无疑是非常致命的。学习任何一个技术知识无疑不是从基础开始;在面试的时候,面试官无疑不是从基础开始拷问。内容包括:Java概述、Java基本语法、Java 执行控制流程、面向对象、访问控制权限、接口和抽象类、异常、内部类、集合、泛形、反射、枚举、I/O、关于 null 的几种处理方式、思维导图。1、Jav
首发10万字Java开发实战文档,涨姿势了!
Java基础1Java语言的三大特性2.Java语言主要特性3\. JDK和JRE有什么区别4.Java基本数据类型及其封装类5.如果main方法被声明为private会怎样?6.说明 下public static void main(String argsQ])这段声明里每个关键字的作用7.与equals的区别8.Object有哪些公用方法9.为什么Jav