Java版 二分查找
来源:互联网 发布:mac 隐藏文件无法显示 编辑:程序博客网 时间:2024/06/09 05:23
一、算法介绍
折半查找(搜索)、二分查找(搜索)
已经排序的数据(假如是从左向右依次递增),取出中间数与查找值比较
如果中间值大于查找值,应该再次向左侧查找,因为左侧都小于当前中间值
如果中间值小于查找值,应该再次向右侧查找,因为右侧都大于当前中间值
不断重复上述查找过程,如果查找出结果直接返回,反之则返回未查询到。
中间数有两种计算方式:
第一次种:
初 始 值:middle = (end - start)/2;
每次计算 :middle = (end - start) / 2 + middle;
第二种:
middle = (start + end)/2;
二、代码实现
/** *二分查找,递归与非递归形式 */public class BinarySearch {public int searchValue(int [] data, int indexValue) {int start = 0;int middle = 0;int end = data.length - 1;while (start <= end) {middle = (start + end)/2;if (data[middle] < indexValue) {start = middle + 1;} else if (data[middle] > indexValue) {end = middle - 1;} else {return middle;}}return -1;}public int searchValue(int [] data, int start, int end, int indexValue) {if (start > end) {return -1;}int middle = (start + end)/2;if (data[middle] < indexValue) {return searchValue(data, middle+1, end, indexValue);} else if (data[middle] > indexValue) {return searchValue(data, start, middle-1, indexValue);} else {return middle;}}public static void main(String[] args) {int[] arr = {2, 3, 5, 6, 8, 9};BinarySearch search = new BinarySearch();System.out.println(search.searchValue(arr, 9) == 5);System.out.println(search.searchValue(arr, 8) == 4);System.out.println(search.searchValue(arr, 6) == 3);System.out.println(search.searchValue(arr, 5) == 2);System.out.println(search.searchValue(arr, 3) == 1);System.out.println(search.searchValue(arr, 2) == 0);System.out.println(search.searchValue(arr, 10) == -1);System.out.println(search.searchValue(arr, 0, arr.length-1, 9) == 5);System.out.println(search.searchValue(arr, 0, arr.length-1, 8) == 4);System.out.println(search.searchValue(arr, 0, arr.length-1, 6) == 3);System.out.println(search.searchValue(arr, 0, arr.length-1, 5) == 2);System.out.println(search.searchValue(arr, 0, arr.length-1, 3) == 1);System.out.println(search.searchValue(arr, 0, arr.length-1, 2) == 0);System.out.println(search.searchValue(arr, 0, arr.length-1, 10) == -1);}}
三、逐步演示
四、时间空间复杂度
时间复杂度:O(longn)(n代表集合中元素的个数)
空间复杂度:O(1)
空间复杂度:O(1)
五、参考资料:
二分查找法的实现和应用汇总
http://www.cnblogs.com/ider/archive/2012/04/01/binary_search.html
《大话数据结构》
五大常用算法之一:分治算法
http://www.cnblogs.com/steven_oyj/archive/2010/05/22/1741370.html
0 0
- Java版 二分查找
- 二分查找--Java版
- 二分查找算法(Java版)
- 二分查找(折半查找) java
- Java二分查找、折半查找
- java版的二分查找算法
- 简单的二分查找(java版)
- 二分查找算法解析(java版)
- 二分查找法 (java版)
- java实现递归版二分查找算法
- 二分查找法(JAVA版)
- Rhyme/二分查找(binary search)Java版
- java二分查找
- java 二分查找法
- java二分查找
- Java实现 二分查找
- java二分查找
- java:二分查找法
- 2013-2014春运12306抢票纪实---致360、搜狗、猎豹、遨游、chrome等浏览器
- C++编程对缓冲区的理解
- hadoop入门
- Sqlite数据库操作的sql操作语句
- hadoop集群搭建——hadoop安装
- Java版 二分查找
- App_Code/DataBase.cs(数据库操作类)
- 贝塞尔曲线绘制的时钟BezierClock
- 云计算是什么意思
- Java 学习记录2
- Redis数据类型与指令详解之集合(t_set)
- App_Code/Operation.cs(业务逻辑操作类)
- 测试主机性能的小脚本
- linux时间 and contab