二分查找法适用于 升序排列的数组,如果你所要操作的数组不是升序排序的,那么请用排序算法,排序一下。

说明:使用二分查找法相比顺序查找  节约了时间的开销,但是增加了空间使用。因为需要动态记录 起始索引和结束索引和中间索引。

顺序查找  平均和最坏情况时间复杂度 :O(n)

二分查找法 时间复杂度 为 :O(log2n)

package part1;

/**
* Created by Administrator on 2018/7/31.
*/
public class demo01{
/*
* 循环实现二分查找算法arr 已排好序的数组x 需要查找的数-1 无法查到数据
*/ /**
*
* @param arr 数组对象
* @param x 所要查找的数
* @return
*/
public static int binarySearch(int[] arr, int x) {
int low = 0;
int high = arr.length-1;
while(low <= high) {
int middle = (low + high)/2; //取中间索引
if(x == arr[middle]) {
return middle;
}else if(x <arr[middle]) {
high = middle - 1; //如果所找的的数小于中间索引对应的值证明所要找的数在左半边,将中间索引前一位设置为终点索引
}else {
low = middle + 1; //如果所找的的数大于中间索引对应的值证明所要找的数在右半边,将中间索引后一位设置为开始索引
}
}
return -1;
}
//递归实现二分查找 /**
*
* @param dataset 数组对象
* @param data 所要查找的数
* @param beginIndex 开始索引
* @param endIndex 结束索引
* @return
*/
public static int binarySearch(int[] dataset,int data,int beginIndex,int endIndex){
int midIndex = (beginIndex+endIndex)/2; //取中间索引
//如果查找的数小于第一位数 或者 查找的数大于最后一位数 或者 起始索引大于结束索引 都说明所查找的数不存在
if(data <dataset[beginIndex]||data>dataset[endIndex]||beginIndex>endIndex){
return -1;
}
//如果查找的数小于中间索引对应的值说明找的数在左半边,递归调用该查找方法,结束索引为中间索引向左移动一位
if(data <dataset[midIndex]){
return binarySearch(dataset,data,beginIndex,midIndex-1);
//如果查找的数大于于中间索引对应的值说明找的数在右半边,递归调用该查找方法,起始索引为中间索引向右移动一位
}else if(data>dataset[midIndex]){
return binarySearch(dataset,data,midIndex+1,endIndex);
//如果所查找的数正好等于中间索引对应的值,那么就将该索引返回
}else {
return midIndex;
}
} public static void main(String[] args) {
int[] arr = { 11,22,33,44,55,66,77,88};
System.out.println("循环查找:" + (binarySearch(arr, 44) + 1));
System.out.println("递归查找"+(binarySearch(arr,44,0,arr.length-1)+1));
}
}

最新文章

  1. Hibernate(3)——实例总结Hibernate对象的状态和ThreadLoacl封闭的session
  2. .NET程序员转Java不完全指南
  3. springmvc中RedirectAttributes的作用
  4. mongodb 常用命令
  5. Oracle基础(五) 权限管理
  6. 关系型数据库事务处理ACID
  7. spark-submit参数说明--standalone
  8. TurnipBit之DIY无线遥控智能小车
  9. 快速开发基于 HTML5 网络拓扑图应用之 DataBinding 数据绑定篇
  10. jumpserver安装
  11. Python Every Class Needs a __repr__
  12. bootstrap完善按钮组bug
  13. beego 初体验 - 环境搭建
  14. Maven子模块
  15. 【struts2】struts2的execAndWait拦截器使用
  16. solr学习一(一大堆的学习资料)
  17. Error: Chromium revision is not downloaded. Failed to download Chromium
  18. 我的CCF备考指南
  19. 【bzoj1787】[Ahoi2008]Meet 紧急集合
  20. open ssh 常用的东西

热门文章

  1. Week8 Teamework from Z.XML-Z.XML游戏功能说明
  2. 最短路径——Dijkstra算法以及二叉堆优化(含证明)
  3. ArcGIS API for javascript中搜索框的使用问题
  4. CentOS 7 samba 配置
  5. [Elasticsearch] 多字段搜索 (一) - 多个及单个查询字符串
  6. [C/C++] C++中new的语法规则
  7. text-overflow使用文字超多div的宽度或超过在table中&lt;td&gt;
  8. hdu 3033 I love sneakers!(分组背包+每组至少选一个)
  9. 【转】Visio画用例模型图竟然没有include关系
  10. 安徽师大附中%你赛day2T3 巧克力 解题报告