Java查找算法-17-二分查找
前面两篇介绍了两个常见的基于数组的排序算法,这篇来学习一个数组查找元素的算法,叫二分查找。这个二分查找效率还是比较高的,比较一次就可以判断一半元素。二分查找的前提是有序数组,所以采用二分查找之前,必须要对数组元素进行排序,你可以用冒泡也可以用选择排序。
1.二分查找原理
2.查找一个小于中间值
3.查找一个大于中间值的
4.查找一个不存在的
5.具体二分查找代码实现
package sort;public class Test_ErFen {public static void main(String[] args) {int[] arr = {11,22,33,44,55,66,77};System.out.println(getIndex(arr,44));System.out.println(getIndex(arr,66));System.out.println(getIndex(arr,68));}public static int getIndex(int[] arr, int target) {//1.定义最小索引,最大索引,中间索引的标记int max = arr.length - 1;int min = 0;int mid = (min+max)/2;// 当中间值不等于要找的值,就开始循环while (arr[mid] != target) {if(arr[mid] < target) {// 说明目标元素在右半部分,最小的索引改变min = mid + 1;}else if (arr[mid] > target) {// 说明目标元素在左侧半部分,最大的索引改变max = mid - 1;}// 由于上面min或者max发生了改变,所以mid需要重新获取新的值mid = (min + max)/2;// 如果最小索引大于最大索引就没有查找的可能性,返回-1if(min > max) {return -1;}}return mid;}
}
打印出: 3, 5, -1
Java查找算法-17-二分查找相关推荐
- 查找算法:二分查找、顺序查找
08年9月入学,12年7月毕业,结束了我在软件学院愉快丰富的大学生活.此系列是对四年专业课程学习的回顾,索引参见:http://blog.csdn.net/xiaowei_cqu/article/de ...
- 查找算法之二分查找(对半查找)
当有序表采用顺序存储时,可以采用二分查找的方式查找指定关键字的元素. 二分查找的基本思想是选择表中某一位置 i i i的元素 A i A_i Ai,设该元素的关键字为 K i K_i Ki ...
- 二分查找算法(折半查找算法)
二分查找算法(折半查找算法) 二分查找又称折半查找.二分搜索.折半搜索等,是在分治算法基础上设计出来的查找算法,对应的时间复杂度为O(logn). 二分查找算法仅适用于有序序列,它只能用在升序序列或者 ...
- 算法总结-二分查找算法
二分查找也称折半查找(Binary Search),是一种效率较高的查找方法.该算法要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列.如果一个序列是无序的或者是链表,那么该序列就不能使用二 ...
- python 查找算法_七大查找算法(Python)
查找算法 -- 简介 查找(Searching)就是根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素. 查找表(Search Table):由同一类型的数据元素构成的集合 关键字(Ke ...
- java二分查找法_java算法之二分查找法的实例详解
java算法之二分查找法的实例详解 原理 假定查找范围为一个有序数组(如升序排列),要从中查找某一元素,如果该元素在此数组中,则返回其索引,否则返回-1.通过数组长度可取出中间位置元素的索引,将其值与 ...
- 查找算法-(顺序查找、二分查找、插值查找、斐波那契查找)
1)顺序查找或叫线性查找 就是顺序遍历匹配 2)二分查找 package search;public class BinarySearch {/*** 二分查找数组必须有序*//**** @param ...
- list 查找_趣味图解算法之二分查找
大多数程序员在看到"算法"两字的时候,是不是头大如斗.但如果想去大公司发展,在面试时又绕不过算法这座大山.市面上好多讲解算法的书籍(如算法导论)基本上都太学术.太复杂,对初学者很不 ...
- 数据结构与算法《二分查找》
数据结构与算法(java)<二分查找> 基本二分查找public class BinarySearch {/*** 1.定义一个有序数组,* 2.定义两个变量i,j* 3.定义一个待查找的 ...
- 算法图解/二分查找/简单查找/选择排序/递归算法/快速排序算法/
大 O 表示法 大 O 表示法在讨论运行时间时,log 指的都是 log2 大 O 表示法指出了算法有多快,让你能够比较操作数,它指出了算法运行时间的增速,而并非以秒为单位的速度. 大 O 表示法指出 ...
最新文章
- 从头学起androidlt;AutoCompleteTextView文章提示文本框.十九.gt;
- Focal Loss升级:让Focal Loss动态化,类别极端不平衡也可以轻松解决
- 减法公式运算法则_人教版数学七年级上册1.3.2有理数的减法视频讲解+知识点+同步练习...
- python数据框常用操作_转载:python数据框的操作
- 计算机网络ipv4到ipv6怎么实现,论计算机网络协议IPV4到IPV6的过渡策略|房屋搬迁过渡协议...
- ajax向后台传递数组
- Socket编程实践(8) --Select-I/O复用
- spark集群访问mysql_spark连接数据源以及在spark集群上跑
- 谷歌、Facebook 大规模宕机!“裸奔时代”程序员该怎么办?
- python seaborn 散点图矩阵_初学pandas与seaborn(六)制作散点图矩阵,用python
- 12557是oracle什么错误吗,在做oracle standby时,出现ORA-12557错误.
- 微信小程序模版合集下载,160个微信小程序源码.zip + 35个行业-微信小程序源码.zip
- mt管理器主题修改教程_微信也可以设置皮肤了!超详细教程和方法!
- JSONP实现跨域(9种跨域方案)
- Android studio下的DNK开发JNI详解流程
- simulink enable嵌套问题
- 【c语言】(函数)利用麦克劳林公式求sinx,cosx,tanx
- Linux的.a、.so和.o文件以及与windows下的对应关系
- Indesign多媒体富交互插件【MagBuilder】与iOS app 【MagViewer】介绍
- 第三章:3.1 正交函数集合
热门文章
- matlab中peaks是什么,Matlab中的peaks函数.doc
- 【数据结构基础_双向链表(有[*pHead]和[*pEnd])_(C语言实现)】
- QClub:Ruby网站架构案例分享──财帮子\u0026FreeWheel
- java 穷举 排列组合_穷举排列组合列表
- mysql 删除时间一个星期_我用财务管理系统花费一天时间做账,别人用一个星期也追赶不上...
- ONFI ZQ Calibration
- IKexpression解读二
- 手机相机好坏测试软件,如何选择好的手机相机?一分钟教你看懂好与坏
- linux 字幕制作工具,Arctime可视化字幕编辑器–做字幕从未如此简单
- 华为董事长不是任正非,而是她