Java算法之二分查找算法
2017-08-28 10:12
169 查看
Java算法之二分查找算法
二分查找算法概述
折半查找又叫二分法查找,在一个查找区间中,确定出查找区间的中心位置,用待查找数据元素的关键字与中心位置上的数据元素的关键字比较,若两者相等,则查找成功;否则,若前者小于后者,则把查找区间定为原查找区间的前半段继续这样的过程;否则,则把查找区间的后半段继续这样的过程。二分查找算法思想
二分查找算法是建立在有序数组基础上的。算法思想为:1. 查找过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则查找过程结束;
2. 如果某一待查找元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟第1点一样从中间元素开始继续进行查找。
3. 如果在某一步骤数组为空,则代表找不到。
二分查找算法原理
采用二分法查找时,数据需是排好序的。基本思想:假设数据是按升序排序的,对于给定值x,从序列的中间位置开始比较,如果当前位置值等于x,则查找成功;若x小于当前位置值,则在数列的前半段中查找;若x大于当前位置值则在数列的后半段中继续查找,直到找到为止。二分查找算法源码
二分查找有while循环和递归查找两种,源码使用循环查找数组中数据。package com.algorithm; /** * 二分查找 * @author Administrator * */ public class BinarySearch { public static int binarySearch(int[] dataset ,int data) { int beginIndex = 0; //定义起始位置 int endIndex = dataset.length - 1; //定义结束位置,数组下标 int midIndex = -1; //定义中点 if(data <dataset[beginIndex]||data>dataset[endIndex]||beginIndex>endIndex){ return -1; //用二分法查找的数据必须是排好序的,因此只要比较第一个元素和最后一个元素就可以确定所查找的数据是否在数组中 } while(beginIndex <= endIndex) { midIndex = (beginIndex+endIndex)/2;//初始化中点 if(data <dataset[midIndex]) { endIndex = midIndex-1; //如果查找的数据小于中点位置的数据,则把查找的结束位置定义在中点 } else if(data>dataset[midIndex]) { //如果查找的数据小于中点位置的数据,则把查找的起始位置定义在中点 beginIndex = midIndex+1; }else { return midIndex; //返回查找到的数据的位置 } } return -1; } public static void main(String[] args) { int[] test1 = { 38,48,59,61,72,99,101 }; // 测试数组 System.out.print("你查找的数据在数组中下标是:"+ BinarySearch.binarySearch(test1,59)); } }
算法效果:
你查找的数据在数组中下标是:2
总结
二分查找法的时间复杂度为O(log n),比较简单。也是面试中常考的一个知识点。推荐博客:
二分查找各种情况大总结 :二分查找算法不同场景的整理、
二分查找专题:面试中常见的二分查找算法整理。
相关文章推荐
- 黑马程序员——Java之二分查找算法
- java算法之二分查找
- Java之二分查找算法
- Java-算法之二分查找
- java之二分查找算法实现
- java算法之二分查找
- 一点一点的积累算法JAVA版之二分查询
- 查找算法之二分查找算法
- java算法之二分查找
- 算法(第四版)学习笔记之二分查找的递归与非递归java实现
- 算法之 查找算法 (一) Java
- java选择算法、java查找算法汇总
- 算法之二分查找(java版实现加测试)
- ⑦初识java:查找算法和插入算法
- (基于Java)算法之二分搜索法
- 我的Java开发学习之旅------>Java经典排序算法之二分插入排序
- 算法笔记_161:算法提高 十进制数转八进制数(Java)
- java实现二叉树的三种遍历算法(递归)
- 各大IT公司算法和数据结构面试题整理Java实现
- 算法笔记_162:算法提高 复数归一化(Java)