二分法查找原理:

      1、只要低位下标不大于高位下标,就进行二分查找(步骤1-3)

      2、先在有序的数组中对半查找中间的坐标,如果中标和要查找的下标相等时,找到目标数,那二分结束。

      3、如果步骤2没有找到,那就会出现先2种情况:a、中标大于find值;b、中标小于find值;

        3.1、如果中标大于find值,说明find值在中标的左边,那么高位就是此时的中标,然后继续二分

        3.2、如果中标小于find值,说明find值在中标的右边,那么低位就是此时的中标,然后继续二分

      4、如果低位下标大于高位下标:那就是没有这个想要查找的find值,且低位和高位一定是相挨着(类似:low[4],high[3],返回-5)。返回此find值本应插入的 负下标-1即:-low - 1

二分法查找缺点:

      1、数组必须是有序的数组。

   

二分法查找的优点:

      1、查找次数少,效率高。

案例:

import java.util.Arrays;

public class TestBinarySearch {
public static void main(String[] args) {
int [] arr={5,13,19,21,37,56,64,75,80,88,92}; //数组必须是有序的 int low = 0; //低位
int high = arr.length; //高位
int mid = 0; //可以随便给中位赋值下标 int find = 37; //查找值 boolean flag = false; while(low <= high){ //只要高位边不比低位小,就继续二分
mid = (low + high)/2; //二分后有三种情况:中位比find值大;中位比find值小;中位和find值相等 if(arr[mid] > find){ //二分之后中位比find值大,说明find值在中位的右边,那么高位就是此时的中位,然后继续二分
high = mid - 1; }else if(arr[mid] < find){ //二分后中位比find值小,说明find值在中位的左边,那么低位就是此时的中位,然后继续二分
low = mid + 1;
}else{ //当中位和find值相等时,找到find值所对应的下标,二分结束
flag = true;
System.out.println(mid);
break;
} } if(flag){
System.out.println("mid=" + mid +"========"+ "find="+ arr[mid]);
}else{
System.out.println(-low - 1); //如果没找到,那肯定是低位大于了高位,且低位和高位相挨着,返回没有找到的find值应该所在的下标位置(即-low - 1)
}
}
}

java 二分法查找原理的更多相关文章

  1. Java 二分法查找

    算法:当数据量很大适宜采用该方法.采用二分法查找时,数据需是有序不重复的. 基本思想:假设数据是按升序排序的,对于给定值 x,从序列的中间位置开始比较,如果当前位置值等于 x,则查找成功:若 x 小于 ...

  2. Java二分法查找

    二分法查找 /** * 二分法查找 找不到返回-1 * @author yangzi * */ public class TwoFind { public static int twoFind(int ...

  3. Java - 二分法查找(尚学堂第七章数组)

    import java.util.Arrays; public class TestBinarySearch { public static void main(String[] args) { in ...

  4. java二分法查找实现代码

    package util; class BinarySearch { static int binarySearch(int[] array,int goal){//传入排好序的数组和目标数字 int ...

  5. java基础-数组的折半查找原理

    java基础-数组的折半查找原理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 如果让你写一个数组的查找功能,需求如下:在一个数组中,找一个元素,是否存在于数组中, 如果存在就返回 ...

  6. Java中数组二分法查找

    算法:当数组的数据量很大适宜采用该方法.采用二分法查找时,数据需是有序不重复的,如果是无序的也可通过选择排序.冒泡排序等数组排序方法进行排序之后,就可以使用二分法查找. 基本思想:假设数据是按升序排序 ...

  7. Java基础(50):二分法查找的非递归实现和递归实现(完整代码可运行,参考VisualGO理解更佳)

    一.概念 二分查找算法也称折半查找,是一种在有序数组中查找某一特定元素的搜索算法. 二.算法思想 搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束:如果某一特定元素大于或者 ...

  8. Java冒泡排序与二分法查找的代码随笔

    package javafirst; import java.util.Arrays; class MaoPao{ //升序排列 /** * @param arr 要排序的数组 * @return i ...

  9. java算法-二分法查找实现

    什么是二分法查找 首先,使用二分法查找的前提是:被查找的数组已排好序 具体实现: 假如有一组数为3,12,24,36,55,68,75,88要查给定的值24.可设三个变量front,mid,end分别 ...

随机推荐

  1. 元祖&字典

    #什么是元祖:元祖是一个不可变的列表(没有改的需求) #======================================基本使用============================== ...

  2. 去掉select在苹果手机上的原生样式

    outline: none; -webkit-appearance: none; 该属性会去掉select所有的默认样式,包括下拉箭头,因此需要通过额外的样式控制下拉箭头

  3. C语言如何获得精确到毫秒的时间

    在做测试或性能优化时,经常要知道程序运行的时间,在Linux系统可以使用time命令来计算程序运行运行所消耗的时间,能精确到毫秒,如果要精确到代码块或某个操作运行时所消耗的时间,time命令就不给力了 ...

  4. 用一行Python进行数据收集探索

    简易的Pandas之路 任何使用Python数据的人都会熟悉Pandas包.Pandas是大多数行和列格式数据的go-to包.如果你没有Pandas,请确保在终端中使用pip install安装: p ...

  5. 201503-1 图像旋转 Java

    思路: 观察输入和输出可以发现,第三列输出为第一行,第二列输出为第二行,第一列输出为第三行.循环即可 import java.util.Scanner; //得分80,本题最高需要输入100W次,因为 ...

  6. java基础一(2020.1.3)

    今日学习内容: 带命令行参数的Java实例 Java的程序结构 Java的变量与常量 带命令行参数的Java实例: class ArgsDemo{ public static void main(St ...

  7. 小白学习之pytorch框架(6)-模型选择(K折交叉验证)、欠拟合、过拟合(权重衰减法(=L2范数正则化)、丢弃法)、正向传播、反向传播

    下面要说的基本都是<动手学深度学习>这本花书上的内容,图也采用的书上的 首先说的是训练误差(模型在训练数据集上表现出的误差)和泛化误差(模型在任意一个测试数据集样本上表现出的误差的期望) ...

  8. Python学习中的随笔,好记性不如烂笔头

    本文 为博主看了 vamei 的blog 写下的随笔 . 致敬Vamei 1.type()   可以显示参数的类型 如 : a=12   type(a) 为 int 2.python的基本类型 为 i ...

  9. 论文翻译——Recursive Deep Models for Semantic Compositionality Over a Sentiment Treebank

    Abstract Semantic word spaces have been very useful but cannot express the meaning of longer phrases ...

  10. java.lang.SecurityException: java.lang.IllegalStateException: java.io.FileNotFoundException:XXXXXX(系统找不到指定文件)

    项目启动成功过,但访问页面抛出异常. 在Maven项目启动的时候,tomcat缓存机制没有吧maven jar除外的jar执行到项目里面,所有不要慌,项目重新启动就OK了, 如果这样还是不行的话就找到 ...