二分法查找原理:

      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. h5-钟表动画案例

    1.html代码 <div class="clock"> <div class="line line1"> <div class= ...

  2. MySql、Mongodb和Redis的区别

    NoSQL 的全称是 Not Only SQL,也可以理解非关系型的数据库,是一种新型的革命式的数据库设计方式,不过它不是为了取代传统的关系型数据库而被设计的,它们分别代表了不同的数据库设计思路. M ...

  3. 基因调控网络 (Gene Regulatory Network) 01

    本文为入门级的基因调控网络文章,主要介绍一些基本概念及常见的GRN模型. 概念:基因调控网络 (Gene Regulatory Network, GRN),简称调控网络,指细胞内或一个基因组内基因和基 ...

  4. chenzl

    大噶好!我是计算机6班的陈志良.我是一名代码小白.大一才刚接触代码,我发现我对编程兴趣挺大.特别是每周的代码作业,特别具有挑战性,每当我AC一道,我内心都会有自豪感和兴奋感,尽管过程有挫折,但我仍然坚 ...

  5. Java之同步方法处理继承Thread类的线程安全问题

    /** * 使用同步方法处理继承Thread类的方式中的线程安全问题 * */class Window4 extends Thread { private static int ticket = 10 ...

  6. Mysql 环境部署

    1.Window 1.1 下载软件: https://dev.mysql.com/downloads/mysql/ 依次点击上图 红色框中按钮 1.2 安装软件 1.2.1 解压软件 正常解压即可  ...

  7. emacs 配置文件

    使用方式: git clone 到本地,把 emacs 复制到 ~/.emacs.d 打开 emacs 会自动安装包 https://github.com/NorseLZJ/lzj-config/tr ...

  8. 关于laravel的一些操作

    1.创建控制器 eg: php artisan make:controller  controllerName 如果是带命名空间需要创建控制器 则不需要加前面的  App/Http/Controlle ...

  9. 34)static 静态成员和静态成员函数

    1) static修饰的方法,只能在这个文件中使用,比如你是多文件编程,别的文件即使引入了我的 .h文件  但那时我的static方法也是不能用 2)C++的static的成员变量   比如  sta ...

  10. spring boot pom demo

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...