目录

一:二分查找的条件

二:二分查找思想​​​​​​​

三:二分查找代码(循环)

四:二分查找代码(递归)


一:二分查找的条件

1.1 必须是顺序存储结构

1.2 必须有序序列

二:二分查找思想

当min > max || max < min的时候没有找到

不断的更改mid , 当mid所指向的值等于查找的值的时候查找成功

首先看一个数组,需要对这个数组进行操作。需要对33进行查找的操作,那么target 的值就是33


首先,对 left 的值和 right 的值进行初始化,然后计算 middle 的值
left = 0, right = size - 1
middle = (left + (right - left) / 2 )

比较 nums[middle] 的值和 target 的值大小关系

if (nums[middle] > target),代表middle向右所有的数字大于target
if (nums[middle] < target),代表middle向左所有的数字小于target
既不大于也不小于就是找到了相等的值
nums[middle] = 13 < target = 33,left = middle + 1

见下图:


循环条件为 while (left <= right)

此时,left = 6 <= right = 11,则继续进行循环

当前,middle = left + ((right - left) / 2),计算出 middle 的值
计算出 middle 的值后,比较 nums[middle] 和 target 的值,发现:

nums[middle] = 33 == target = 33,找到目标

三:二分查找代码(循环)

package look;public class BinarySearch {public static void main(String[] args) {int[] arr = new int[]{1,2,6,7,9};int i = search(arr, 1, 0, arr.length - 1);//(0 , 4)System.out.print(i);}public static int search(int[] arr, int target, int min, int max) {if(min > max || max < min) {return -1;}while(min <= max) {int mid = (min + max) / 2;if(arr[mid] == target) {return mid;}if(arr[mid] < target) {min = mid + 1;}else if(arr[mid] > target) {max = mid - 1;}else {return -1;}}return -1;}
}

四:二分查找代码(递归)

package sort;import java.util.Arrays;public class InsertSort {public static void main(String[] args) {int[] arr = new int[] {1, 2, 3, 4, 5, 6};int i = select(arr, 0, arr.length - 1, 4);System.out.println(i);}public static int select(int[] array, int left, int right, int searchVal) {if(left > right || array[0] > searchVal || array[right] < searchVal) {return -1;}//插值查找
//      int mid = left + (right - left)*(searchVal - array[left])/(array[right] - array[left]);//二分查找int mid = (left + right)/2;int midValue = array[mid];if(midValue < searchVal) {return select(array, mid + 1, right, searchVal);}else if(midValue > searchVal) {return select(array, left, mid - 1, searchVal);}else {return mid;}}
}

java二分查找(含二分查找代码)相关推荐

  1. 线性查找法java代码_Java线性查找和二分查找

    Java线性查找和二分查找. 一 线性查找 定义:在一列给定的值中进行搜索,从一端开始逐一检查每个元素,直到找到所需元素的过程. 线性查找又称为顺序查找.如果查找池是某种类型的一个表,比如一个数组,简 ...

  2. Java有序表查找:折半查找、二分查找、差值查找和斐波那契查找

    Java有序表查找:折半查找.二分查找.差值查找和斐波那契查找     [尊重原创,转载请注明出处]http://blog.csdn.net/guyuealian/article/details/51 ...

  3. java排序方法调用_Java实现顺序查找、二分查找、冒泡排序、方法调用

    上帝没给我成为富二代的机会,但是给了我成为富一代的机会! 主子很萌:敲代码是个快乐的过程代码截图/图1 题目题目/图2 程序源代码 import java.util.Scanner; /** * * ...

  4. 【Java数据结构与算法】第九章 顺序查找、二分查找、插值查找和斐波那契查找

    第九章 顺序查找.二分查找.插值查找和斐波那契查找 文章目录 第九章 顺序查找.二分查找.插值查找和斐波那契查找 一.顺序查找 1.基本介绍 2.代码实现 二.二分查找 1.基本介绍 2.代码实现 三 ...

  5. Java数据结构与算法——线性查找 二分查找 插值查找

    1.线性查找 有一个数列: {1,8, 10, 89, 1000, 1234} ,判断数列中是否包含此名称[顺序查找] 要求: 如果找到了,就提示找到,并给出下标值. package com.szh. ...

  6. 【Java】 查找数组中指定元素之 顺序查找 与 二分查找

    今天博主分享两个查找数组中指定元素的算法:顺序查找与二分查找 小小目录 1.顺序查找 2. 二分查找 1.顺序查找 给定一个数组, 再给定一个元素, 找出该元素在数组中的位置. 代码如下: //顺序查 ...

  7. 二分查找的平均查找长度_二分查找(折半查找)代码实现

    整理不易,手有余香请点赞! 折半查找,也称二分查找,在某些情况下相比于顺序查找,使用折半查找算法的效率更高.但是该算法的使用的前提是静态查找表中的数据必须是有序的. 在折半查找之前对查找表按照所查的关 ...

  8. java数组线性查找_数组查找: 线性查找与二分查找

    前言 从数组中查找你需要的数据,是一个很常见的需求,那么当你查找所需数据时,用什么方法查找速度最快? 本文将通过图文形式,详细讲解线性查找与二分查找,并用JavaScript将其实现,欢迎各位感兴趣的 ...

  9. 二分查找(折半查找)简介与代码实现(C++)

    二分查找(折半查找)简介与代码实现 1.简介 2.代码实现(C++) 2.1.写法一(target在左闭右闭区间) 2.2.写法二(target在左闭右开区间) 3.代码检验 1.简介 二分查找的本质 ...

  10. Java数据结构与算法 线性查找和二分查找

    查找 查找(searching)是在一组数据项中找到指定的目标元素(target element)或者判定组内不存在目标的过程.要查找的数据项组有事成为查找池(search pool). 在此讨论两种 ...

最新文章

  1. 【UML建模】机房中的UML图
  2. 12行代码AC-Leecode 598. 范围求和 II——Leecode每日一题系列
  3. QFontDatabase: Cannot find font directory
  4. MacOS12.3M1出现程序killed的一些想法
  5. spring 启动完成后事件监听器处理
  6. 广告系统中的Exploitation and Exploration(二)
  7. 易语言服务端与客户端怎么传送_配置中心是怎么推送的?动手实现一个 Long Polling 长轮询...
  8. python机器学习库sklearn——k均值聚类
  9. 深入理解Solaris内核中互斥锁(mutex)与条件变量(condvar)之协同工作原理
  10. 《空间谱估计理论与算法》学习笔记001-绪论
  11. C语言中callback回调函数,知识分享:C 语言函数指针之回调函数
  12. 2022年前端自学全套路线总结(黑马版)
  13. excel IRR利率函数公式,算利率
  14. http://baiy.cn/doc/cpp/inside_exception.htm#栈回退(Stack_Unwind)机制
  15. RSA 含两道oj 上ctf题目
  16. pandas已知数值怎么找位置_pandas.dataframe中根据条件获取元素所在的位置方法(索引)...
  17. 关于order by的一些用法
  18. 【excel】SUMIF合并单元格
  19. GOOGLE卫星地图 计算方式
  20. 工业控制系统接口测试平台研究

热门文章

  1. 笔记本电脑识别不了周围WIFI
  2. java 消息队列详解_Java消息队列-Spring整合ActiveMq的详解
  3. 大连地铁首次穿海 地铁5号线开始黄海隧道作业
  4. centos 下默认用户不是root,如何激活root用户
  5. ASP.NET Core(.NET Core)中使用HtmlDecode和HtmlEncode方法
  6. 使用mpvue开发小程序教程(三)
  7. 小猫爪:S32K3学习笔记06-S32K3之BCTU
  8. ideavim快捷键整理
  9. Latex中希腊字母如何加粗和斜体
  10. 波浪理论的入门知识和使用技巧详解