I学霸官方免费教程二十九:Java查找算法之二分法查找
2015-08-12 14:46
344 查看
二分法查找算法
基本步骤:第一步:获取数组中间的下标
第二步:中间下标处的值和目标值比较,如果目标值大,说明要找的值在数组的后边一半中
第三步:再次获取数组右边一半的中间下标
第四步:再次用获得的中间下标和目标值进行比较
后续步骤以此类推,这样每次查找都在“半份”数据中进行,所以又叫折半查找。这也是为什么使用二分法查找之前必须要对数组进行排序的原因。如果不排序,将无法判断目标值在哪“半份”中
实例: package algorithm.binary_search; /** * 演示二分法查找算法 * @author 学霸联盟 - 赵灿 */ public class BinarySeachDemo { public static void main(String[] args) { int[] arr = { 1, 2, 3, 4, 5, 6, 7 }; //目标值,查找6在数组中的下标 int tagValue = 6; int index = binarySeach(arr, tagValue); if(index > -1){ System.out.println("目标值:" + tagValue + "的下标为:" + index); } else { System.out.println("没有找到目标值:" + tagValue); } } /** * 实现二分法查找的方法 */ public static int binarySeach(int[] arr, int tagValue){ //查找范围的第一个下标 int firstIndex = 0; //查找范围的最后一个下标 int lastIndex = arr.length - 1; //如果第一个下标比最后一个下标还大,就没有必要再查找了,结束循环 while (firstIndex <= lastIndex) { //获取查找范围中间的下标 int index = (lastIndex - firstIndex) / 2 + firstIndex; if(arr[index] == tagValue){ //如果两个值相等,说明index就是要找的下标 //如果找到目标值,执行此处的return语句 return index; } else if(arr[index] > tagValue){ //如果中间下标处的值比目标值大,说明查找范围在index的左侧 //所以应该将查找范围的最后一个下标设置为index-1 lastIndex = index - 1; } else { //否则说明查找范围在index的右侧 //所以应该将查找范围的第一个下标设置为index+1 firstIndex = index + 1; } } //如果循环执行完了还没有找到,返回-1 //因为数组的下标不可能为-1,所以-1代表没有找到 return -1; } } 运行结果: 目标值:6的下标为:5
版权声明:本文为博主原创文章,未经博主允许不得转载。
相关文章推荐
- JAVA File常用的API介绍
- java本地生成excel
- Java ClassLoader基础及加载不同依赖 Jar 中的公共类
- javafx mouseEvent
- 丢掉鼠标吧,使用最好用的Eclipse快捷键
- 读张孝详《JAVA就业培训指导》二
- Mac下配置java开发环境(idea,git)
- springMVC实现人气,价格排序
- IDEA & Maven & Spring & MyBatis 编写数据服务
- Eclipse引入jar包的三种方式
- Spring处理器
- SAS JAVA 连接操作
- Spring注解和配置方式
- java利用反射调用类的某个方法
- Spring依赖注入
- Spring反射机制
- URL编码与两次encodeURI
- 智渔课堂官方免费教程二十八:Java排序算法之选择排序和冒泡排序
- I学霸官方免费教程二十八:Java排序算法之选择排序和冒泡排序
- Java ArrayList 删除重复值