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

九路 等级 867 0 0
标签: Java
    //二分查找法非递归实现,在一个有序的数组中查找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回调机制(CallBack)之小红是怎样买到房子的??
JAVA回调机制CallBack 序言最近学习java,接触到了回调机制(CallBack)。初识时感觉比较混乱,而且在网上搜索到的相关的讲解,要么一言带过,要么说的比较单纯的像是给CallBack做了一个定义。当然了,我在理解了回调之后,再去看网上的各种讲解,确实没什么问题。但是,对于初学的我来说,缺了一个循序渐进的过程。此处,将我对回调机制的个人理解,按
ES6+的新语法
1. opts:Object 表示opts的类型是Object类型。 这有点类似.Net中的为泛型指定类型。java中为泛型指定类型是用 **extends**关键词。 //TODO .Net 和 java中相同写法的CASE 2. opts:?Object 表示该类型是非必须的。在java 中有类似的学法。 //TODO java中的相同语法
Java 中的方法
定义一个方法的语法是: **访问修饰符  返回值类型  方法名(参数列表){** **方法体;** **}** 其中: 1、 **访问修饰符**:方法允许被访问的权限范围, 可以是 public、protected、private 甚至可以省略 ,其中 public 表示该方法可以被其他任何代码调用 , protected 只有子类可用 , pr
Java中的native关键字
**一.  什么是Native Method**    简单地讲,一个Native Method就是一个java调用非java代码的接口。一个Native Method是这样一个java的方法:该方法的实现由非java语言实现,比如C。这个特征并非java所特有,很多其它的编程语言都有这一机制,比如在C++中,你可以用extern "C"告知C++编译器去
Java中的公平锁和非公平锁实现详解
* [前言](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fblog.csdn.net%2Fqyp199312%2Farticle%2Fdetails%2F70598480%23%E5%89%8D%E8%A8%80) * [ReentrantLock的可重入性分析](https:/
Java中的参数验证(非Spring版)
1\. Java中的参数验证(非Spring版) ======================== 1.1. 前言 ------- * 为什么我总遇到这种非正常问题,我们知道很多时候我们的参数校验都是放在controller层的传入参数进行校验,我们常用的校验方式就是引入下列的jar包,在参数中添加`@Validated`,并对Bean对象的参数做不
Java枚举的作用和用法
从没有枚举的时代说起 在枚举出现之前,如果想要表示一组特定的离散值,往往使用一些常量。例如: \[Java\]  纯文本查看 复制代码 [?](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fbbs.itheima.com%2F%23) 01 02 03 04 05 06
Java枚举的用法和原理深入
转载请注明原文地址:[https://www.cnblogs.com/ygj0930/p/10843644.html](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fwww.cnblogs.com%2Fygj0930%2Fp%2F10843644.html) 一:枚举的用法 ======
Java静态方法和实例方法 java中的数组作为形参传入
Java静态方法和实例方法 java中的数组作为形参传入 Java虚拟机 ======= 启动一个Java程序的时候,会诞生一个虚拟机实例,当程序关闭退出时,该实例会消失。 如果一个机器上运行着三个Java程序,即有三个Java虚拟机实例 Java虚拟机会调用某个初始类的main()方法运行一个Java程序,此方法将会作为程序的初始线程启动,任何线程都是
java native方法与JNI实现
<div id="cnblogs\_post\_body" class="blogpost-body"><p><span style="color: #ff0000"><strong>native方法定义:</strong></span> &nbsp; &nbsp; &nbsp; &nbsp;</p> <p>&nbsp; &nbsp; &nbsp; 简单地讲
java中equal()方法和==方法的区别
对于基本数据类型而言。int a = 10;int b = 10; a==b 返回true.对于引用类型而言String c = new String("10");String d = new String("10");c == d 返回false,c.equals(d)返回true. Compares this string to the specifi
URL编码和解码的一个小问题(JS方法和JAVA方法)
var href = window.location.href; var existAffirm = href.indexOf("?") if(existAffirm!=-1){ var subText = href.split("?");
15道非常经典的Java面试题
试题如下: ![](http://static.oschina.net/uploads/space/2016/0729/022902_IBMr_121944.jpg)![](http://static.oschina.net/uploads/space/2016/0729/022923_Exeo_121944.jpg)![](http://static.o
ABAP和Java的destination和JNDI
Netweaver里使用事务码SM59创建Destination: ![](https://oscimg.oschina.net/oscnet/07c4c8dd303d0f55213b36d27075c745ea3.png) Java ==== 新建一个destination: ![](https://oscimg.oschina.net/oscne