在一组数据当中我们取出一个我们想要的数据的过程,谓之查找。

1、简单查找:

  需求:在一组数据当中找到你想要的一个数据,并且返回该数据在数组当中的索引。

  思路:循环遍历整个数组,然后拿各个元素与所要找出的数字做比较,如果相等返回该位置的索引,相反如果查找完之后,仍没有找到数据,此时就返回-1,表示该数据不再数组当中。

  代码:

class SimpleFind
{ public static void main(String [] args)
{ int[] arr = {1,3,89,43,6,80};
System.out.print(simpleFind(arr,3)); } public static int simpleFind(int [] arr,int key)
{ for(int i = 0; i<arr.length ; i++)
{ if(arr[i] == key)
return i;
continue; } return -1; } }

  但是这种方法相对来说有些低效,下面我们介绍一种比较高效的一种方法。

  思路:假如现在我们要查找一个数在一个已经排序好了的数组中。较之第一种方法,我们先拿我们要找的数字与数组中间的数字做比较,如果数字大于中间的数字,此时我们数字肯定不再中间数字的左边了,但是可能存在于数字右边。我们再拿要找的数字与右边一半的数字做比较,如果大于则继续查找右边的那一半,否则查找左边的另一半。周而往复,直至查找到,返回索引值,否则返回-1,表示数组当中不存在这个数字。

  

  

class BinarySearch
{ public static void main(String[] args)
{ int[] arr = {1,4,7,8,13,24,56,99};
//System.out.print(binarySearch(arr,13));
System.out.print(binarySearch2(arr,56)); } public static int binarySearch(int[] arr, int key)
{ int mid = (arr.length-1)>>>1;
//System.out.print(mid);
int min = 0;
int max = arr.length-1;
//System.out.print(min<max);
while(min<=max)
{
if(arr[mid]>key){
max = mid-1;
mid = (min+max)>>>1;
}else if(arr[mid]<key){
min = mid+1;
mid = (max+min)>>>1;
}else{
return mid;
}
//System.out.println("min = "+min+" "+"max = "+max); }
return -1; }
public static int binarySearch2(int[] arr, int key)
{ int mid = (arr.length-1)>>>1;
//System.out.print(mid);
int min = 0;
int max = arr.length-1;
//System.out.print(min<max);
while(arr[mid] != key)
{
if(arr[mid]>key){
if(max<min)
return -1;
max = mid-1;
mid = (min+max)>>>1;
}else{
if(max<min)
return -1;
min = mid+1;
mid = (max+min)>>>1;
}
//System.out.println("min = "+min+" "+"max = "+max);
}
return mid; }
}

  

java学习之查找的更多相关文章

  1. (私人收藏)[开发必备]最全Java离线快速查找手册(可查询可学习,带实例)

    (私人收藏)[开发必备]最全Java离线快速查找手册(可查询可学习,带实例) https://pan.baidu.com/s/1L54VuFwCdKVnQGVc8vD1TQnwmj java手册 Ja ...

  2. 0032 Java学习笔记-类加载机制-初步

    JVM虚拟机 Java虚拟机有自己完善的硬件架构(处理器.堆栈.寄存器等)和指令系统 Java虚拟机是一种能运行Java bytecode的虚拟机 JVM并非专属于Java语言,只要生成的编译文件能匹 ...

  3. 《Java学习笔记(第8版)》学习指导

    <Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...

  4. Java学习之路:不走弯路,就是捷径

    1.如何学习程序设计? JAVA是一种平台,也是一种程序设计语言,如何学好程序设计不仅仅适用于JAVA,对C++等其他程序设计语言也一样管用.有编程高手认为,JAVA也好C也好没什么分别,拿来就用.为 ...

  5. Java学习第一天

    Java学习第一天 对于网络管理员或者黑客必须知道的八个cmd命令 详情请参考:http://www.2cto.com/os/201608/533964.html          nbtstat  ...

  6. 20145304 第五周Java学习报告

    20145304<Java程序设计>第5周学习总结 教材学习内容总结 1.使用try.catch: 如果使用了try.catch,编译时会尝试执行try区块中的程序代码,如果有错误,执行流 ...

  7. 20145330第九周《Java学习笔记》

    20145330第九周<Java学习笔记> 第十六章 整合数据库 JDBC入门 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JD ...

  8. Java学习-043-获取文件在目录中的路径

    我们在日常的电脑使用中,经常需要在当前目录或当期目录及其子目录中查找文件,并获取相应的文件路径名.在我们的自动化测试中,也经常需要确认文件在目录中是否成功生成或已存在,因而我写了一个小方法来实现. 获 ...

  9. Java学习-024-获取当前类名或方法名二三文

    今天,看朋友编写程序,打印日志时,需要记录当前类的类名以及当前方法的方法名,我发现 TA 将类名或者方法名直接写死在了代码中...虽说这样可以实现记录类名和方法名,但是当有特殊情况需要修改类名或者方法 ...

随机推荐

  1. Writing Your First Test

    Let's say you have an activity layout that represents a welcome screen: <?xml version="1.0&q ...

  2. 关于promise

    后来发现promise是解决异步的一个链式调用的好的方法,避免了所谓的回调的监狱, 它有三个状态,未作为,已经完成和已经失败,起始是未作为,然后有了动作总会有个结果, 分成resolve,已经顺利ok ...

  3. u盘复制提示文件过大

    应该有很多个朋友也遇到过同样的问题,就是我们的u盘的明明可用的空间还有很多,甚至一个空的16g的u盘,但从window等操作系统向u盘拷贝文件的时候,却不能容下诸如iso4g的镜像文件,难道是生产u盘 ...

  4. JavaScript Window - 浏览器对象模型

    浏览器对象模型 (BOM) 使 JavaScript 有能力与浏览器"对话". 浏览器对象模型 (BOM) 浏览器对象模型(Browser Object Model (BOM))尚 ...

  5. 实现Bootstrap Carousel Fade Transition 淡入淡出效果

    html代码: <div id="carousel" class="carousel slide carousel-fade" data-ride=&qu ...

  6. Java反射学习(java reflect)(三)

    五.方法指针 据说JAVA方法指针的出现,是作为反射包的附产品 : 使用原理:Invoke被允许调用包装在当前Method对象的方法: 第一个参数为隐式参数,可用null,第二个参数为显示参数. Ex ...

  7. 挖潜无极限———数据挖掘技术与应用热点扫描[ZZ]

    “我们把世界看成数学,并且把你也看成数学”——用这句话来说明数据挖掘技术的复合性和应用的广泛性似乎再好不过.如今,虽然一些行业在应用这一技术上仍然缺乏足够的主动,但一个不能阻挡的趋势是:已经有越来越多 ...

  8. Unable to load configuration. - bean - jar: ....struts2-core-2.1.8.1.jar!/struts-default.xml:47:178

    摘录的异常代码: 2013-12-14 22:42:07 com.opensymphony.xwork2.util.logging.commons.CommonsLogger error严重: Dis ...

  9. directsound 应用实例

    sdk里边有个文件夹Samples\C++\XInput\AudioController这个就是

  10. PHPCMS(2)PHPCMS V9 环境搭建(转)

    转自:http://www.cnblogs.com/Braveliu/p/5072920.html PHPCMS V9的学习总结分为以下几点: [1]PHPCMS 简介 PHP原始为Personal ...