java二分查找(含二分查找代码)
目录
一:二分查找的条件
二:二分查找思想
三:二分查找代码(循环)
四:二分查找代码(递归)
一:二分查找的条件
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,找到目标
![](/assets/blank.gif)
三:二分查找代码(循环)
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二分查找(含二分查找代码)相关推荐
- 线性查找法java代码_Java线性查找和二分查找
Java线性查找和二分查找. 一 线性查找 定义:在一列给定的值中进行搜索,从一端开始逐一检查每个元素,直到找到所需元素的过程. 线性查找又称为顺序查找.如果查找池是某种类型的一个表,比如一个数组,简 ...
- Java有序表查找:折半查找、二分查找、差值查找和斐波那契查找
Java有序表查找:折半查找.二分查找.差值查找和斐波那契查找 [尊重原创,转载请注明出处]http://blog.csdn.net/guyuealian/article/details/51 ...
- java排序方法调用_Java实现顺序查找、二分查找、冒泡排序、方法调用
上帝没给我成为富二代的机会,但是给了我成为富一代的机会! 主子很萌:敲代码是个快乐的过程代码截图/图1 题目题目/图2 程序源代码 import java.util.Scanner; /** * * ...
- 【Java数据结构与算法】第九章 顺序查找、二分查找、插值查找和斐波那契查找
第九章 顺序查找.二分查找.插值查找和斐波那契查找 文章目录 第九章 顺序查找.二分查找.插值查找和斐波那契查找 一.顺序查找 1.基本介绍 2.代码实现 二.二分查找 1.基本介绍 2.代码实现 三 ...
- Java数据结构与算法——线性查找 二分查找 插值查找
1.线性查找 有一个数列: {1,8, 10, 89, 1000, 1234} ,判断数列中是否包含此名称[顺序查找] 要求: 如果找到了,就提示找到,并给出下标值. package com.szh. ...
- 【Java】 查找数组中指定元素之 顺序查找 与 二分查找
今天博主分享两个查找数组中指定元素的算法:顺序查找与二分查找 小小目录 1.顺序查找 2. 二分查找 1.顺序查找 给定一个数组, 再给定一个元素, 找出该元素在数组中的位置. 代码如下: //顺序查 ...
- 二分查找的平均查找长度_二分查找(折半查找)代码实现
整理不易,手有余香请点赞! 折半查找,也称二分查找,在某些情况下相比于顺序查找,使用折半查找算法的效率更高.但是该算法的使用的前提是静态查找表中的数据必须是有序的. 在折半查找之前对查找表按照所查的关 ...
- java数组线性查找_数组查找: 线性查找与二分查找
前言 从数组中查找你需要的数据,是一个很常见的需求,那么当你查找所需数据时,用什么方法查找速度最快? 本文将通过图文形式,详细讲解线性查找与二分查找,并用JavaScript将其实现,欢迎各位感兴趣的 ...
- 二分查找(折半查找)简介与代码实现(C++)
二分查找(折半查找)简介与代码实现 1.简介 2.代码实现(C++) 2.1.写法一(target在左闭右闭区间) 2.2.写法二(target在左闭右开区间) 3.代码检验 1.简介 二分查找的本质 ...
- Java数据结构与算法 线性查找和二分查找
查找 查找(searching)是在一组数据项中找到指定的目标元素(target element)或者判定组内不存在目标的过程.要查找的数据项组有事成为查找池(search pool). 在此讨论两种 ...
最新文章
- 【UML建模】机房中的UML图
- 12行代码AC-Leecode 598. 范围求和 II——Leecode每日一题系列
- QFontDatabase: Cannot find font directory
- MacOS12.3M1出现程序killed的一些想法
- spring 启动完成后事件监听器处理
- 广告系统中的Exploitation and Exploration(二)
- 易语言服务端与客户端怎么传送_配置中心是怎么推送的?动手实现一个 Long Polling 长轮询...
- python机器学习库sklearn——k均值聚类
- 深入理解Solaris内核中互斥锁(mutex)与条件变量(condvar)之协同工作原理
- 《空间谱估计理论与算法》学习笔记001-绪论
- C语言中callback回调函数,知识分享:C 语言函数指针之回调函数
- 2022年前端自学全套路线总结(黑马版)
- excel IRR利率函数公式,算利率
- http://baiy.cn/doc/cpp/inside_exception.htm#栈回退(Stack_Unwind)机制
- RSA 含两道oj 上ctf题目
- pandas已知数值怎么找位置_pandas.dataframe中根据条件获取元素所在的位置方法(索引)...
- 关于order by的一些用法
- 【excel】SUMIF合并单元格
- GOOGLE卫星地图 计算方式
- 工业控制系统接口测试平台研究