前面两篇介绍了两个常见的基于数组的排序算法,这篇来学习一个数组查找元素的算法,叫二分查找。这个二分查找效率还是比较高的,比较一次就可以判断一半元素。二分查找的前提是有序数组,所以采用二分查找之前,必须要对数组元素进行排序,你可以用冒泡也可以用选择排序。

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-二分查找相关推荐

  1. 查找算法:二分查找、顺序查找

    08年9月入学,12年7月毕业,结束了我在软件学院愉快丰富的大学生活.此系列是对四年专业课程学习的回顾,索引参见:http://blog.csdn.net/xiaowei_cqu/article/de ...

  2. 查找算法之二分查找(对半查找)

      当有序表采用顺序存储时,可以采用二分查找的方式查找指定关键字的元素.   二分查找的基本思想是选择表中某一位置 i i i的元素 A i A_i Ai​,设该元素的关键字为 K i K_i Ki​ ...

  3. 二分查找算法(折半查找算法)

    二分查找算法(折半查找算法) 二分查找又称折半查找.二分搜索.折半搜索等,是在分治算法基础上设计出来的查找算法,对应的时间复杂度为O(logn). 二分查找算法仅适用于有序序列,它只能用在升序序列或者 ...

  4. 算法总结-二分查找算法

    二分查找也称折半查找(Binary Search),是一种效率较高的查找方法.该算法要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列.如果一个序列是无序的或者是链表,那么该序列就不能使用二 ...

  5. python 查找算法_七大查找算法(Python)

    查找算法 -- 简介 查找(Searching)就是根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素. 查找表(Search Table):由同一类型的数据元素构成的集合 关键字(Ke ...

  6. java二分查找法_java算法之二分查找法的实例详解

    java算法之二分查找法的实例详解 原理 假定查找范围为一个有序数组(如升序排列),要从中查找某一元素,如果该元素在此数组中,则返回其索引,否则返回-1.通过数组长度可取出中间位置元素的索引,将其值与 ...

  7. 查找算法-(顺序查找、二分查找、插值查找、斐波那契查找)

    1)顺序查找或叫线性查找 就是顺序遍历匹配 2)二分查找 package search;public class BinarySearch {/*** 二分查找数组必须有序*//**** @param ...

  8. list 查找_趣味图解算法之二分查找

    大多数程序员在看到"算法"两字的时候,是不是头大如斗.但如果想去大公司发展,在面试时又绕不过算法这座大山.市面上好多讲解算法的书籍(如算法导论)基本上都太学术.太复杂,对初学者很不 ...

  9. 数据结构与算法《二分查找》

    数据结构与算法(java)<二分查找> 基本二分查找public class BinarySearch {/*** 1.定义一个有序数组,* 2.定义两个变量i,j* 3.定义一个待查找的 ...

  10. 算法图解/二分查找/简单查找/选择排序/递归算法/快速排序算法/

    大 O 表示法 大 O 表示法在讨论运行时间时,log 指的都是 log2 大 O 表示法指出了算法有多快,让你能够比较操作数,它指出了算法运行时间的增速,而并非以秒为单位的速度. 大 O 表示法指出 ...

最新文章

  1. 从头学起androidlt;AutoCompleteTextView文章提示文本框.十九.gt;
  2. Focal Loss升级:让Focal Loss动态化,类别极端不平衡也可以轻松解决
  3. 减法公式运算法则_人教版数学七年级上册1.3.2有理数的减法视频讲解+知识点+同步练习...
  4. python数据框常用操作_转载:python数据框的操作
  5. 计算机网络ipv4到ipv6怎么实现,论计算机网络协议IPV4到IPV6的过渡策略|房屋搬迁过渡协议...
  6. ajax向后台传递数组
  7. Socket编程实践(8) --Select-I/O复用
  8. spark集群访问mysql_spark连接数据源以及在spark集群上跑
  9. 谷歌、Facebook 大规模宕机!“裸奔时代”程序员该怎么办?
  10. python seaborn 散点图矩阵_初学pandas与seaborn(六)制作散点图矩阵,用python
  11. 12557是oracle什么错误吗,在做oracle standby时,出现ORA-12557错误.
  12. 微信小程序模版合集下载,160个微信小程序源码.zip + 35个行业-微信小程序源码.zip
  13. mt管理器主题修改教程_微信也可以设置皮肤了!超详细教程和方法!
  14. JSONP实现跨域(9种跨域方案)
  15. Android studio下的DNK开发JNI详解流程
  16. simulink enable嵌套问题
  17. 【c语言】(函数)利用麦克劳林公式求sinx,cosx,tanx
  18. Linux的.a、.so和.o文件以及与windows下的对应关系
  19. Indesign多媒体富交互插件【MagBuilder】与iOS app 【MagViewer】介绍
  20. 第三章:3.1 正交函数集合

热门文章

  1. matlab中peaks是什么,Matlab中的peaks函数.doc
  2. 【数据结构基础_双向链表(有[*pHead]和[*pEnd])_(C语言实现)】
  3. QClub:Ruby网站架构案例分享──财帮子\u0026FreeWheel
  4. java 穷举 排列组合_穷举排列组合列表
  5. mysql 删除时间一个星期_我用财务管理系统花费一天时间做账,别人用一个星期也追赶不上...
  6. ONFI ZQ Calibration
  7. IKexpression解读二
  8. 手机相机好坏测试软件,如何选择好的手机相机?一分钟教你看懂好与坏
  9. linux 字幕制作工具,Arctime可视化字幕编辑器–做字幕从未如此简单
  10. 华为董事长不是任正非,而是她