码迷,mamicode.com
首页 > 编程语言 > 详细

JAVA-初步认识-第五章-数组-常见操作-查找&折半查找

时间:2017-10-01 12:25:23      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:大小   操作   单词   首字母   分享   循环结构   语言   常见   for循环结构   

一. 查找

想要知道某一个数据在数组中的位置。(从一个数组中查找某一个数据,数据存在的话,同时返回角标号,没有相应的数据,返回-1.)

介绍数组常见的操作,实际上就是功能化的函数(求最值,排序,查找)。一旦说到函数,就涉及到两个明确,返回值和输入。这里要得到的是位置,也就是索引号。我们要知道某一个数据在某一个数组中的位置,数据和数组都是不确定的,这是一个通用的解法。编写程序就是用通用的方法,来解决具体的问题,主函数中是确定的问题,功能化函数中是通用的解法。因此,输入中有两个形参。在写形参时,要标注类型和变量名。

时刻要用辩证的思维来看待问题,查找有两种结果,找到和找不到。找的到时,直接返回角标值,找不到时,返回-1。在数组对数据编号时,都是从0开始编的,返回了-1,就表示数组中没有该数据,也不存在相应的角标号。

这里还需要注意的一个问题是,是否对应数据的角标只有一个?原因就在于数组的不确定性,对样性。

技术分享

这里return -1写在for语句的外面也挺奇怪的。我们来分析一下,(其实这里牵涉return能够返回多个值的问题),从定义方法后,进入for语句。for循环里面,如果if成立,就返回一个。for里面有这么三种情况,有多个返回值,有一个返回值,无返回值。无论for里面是什么情况,接着都会返回一个-1的值。但是数组里面有对应数据的时候,得到的返回值就是第一次出现数据的角标号,后面的返回值都不管,这里值得深思。无论怎样,最后都会返回一个-1的值,如果前面有对应数据,有返回角标值,那么这个-1就无所谓;如果前面没有返回值,那么这里的-1就是唯一的返回值,也就意味着数组中没有对应的数据。

二. 

给定一个确定的数组{4,1,8,7,3,8,2},如果我们利用上面的源代码来查找数据8的位置,结果显示的是第一个8所在的角标2。

这里我产生一个疑问,为什么输出语句最后输出的值不是角标5,是比2后返回,最后的值应该是5才对。我怀疑我对for循环语句理解不对,for循环结构是否对每一个x都执行了?怎么退出的,是全部执行完了退出的,还是满足了某一个x的执行语句才退出的?→循环语句的结束,都是最终不符合循环条件才退出的,和执行语句并无关系。那么,对于这里的两个返回值(其实是三个返回值,-1是一直都要返回的),输出先返回的值,就值得深思了。

技术分享

int index=getIndex(arr, 8)中方法名为getIndex,可见函数名和类名的起名规则不一样,类名第一个单词的首字母就开始大写了,而函数名要等到第二个单词才行。

三. 折半查找

从视频的讲解来看,数据的操作先介绍了查找,又介绍了折半查找。为什么会介绍两种查找,就在于数据的多少不一样,查找的程序是针对数据比较少的情况来的。折半查找是对于数据很多时,设定的源代码。

折半查找可以提高查找的效率。能够执行折半查找的数据有一个前提,必须是有序的。

举例说明

技术分享

情况1:

key=45,确定数据45的角标。

开始时,我们要确定中间角标的大小,中间角标=(首角标+尾角标)/2,由于这是java计算机语言中的计算,所以中间角标的结果绝对不会是浮点型,都是int类型。这一连串数据是有大小顺序的,但是并没有规定,相差都为1,思维不能僵硬。

 技术分享

情况2:

key=50, 

思考:折半查找中设计几个内容,首先需要三个变量,需要重复地去做中间角标是不是要找的元素,是大还是还是小,然后继续进行折半的动作,这些动作是在重复执行,这就用到了循环。

技术分享

 

JAVA-初步认识-第五章-数组-常见操作-查找&折半查找

标签:大小   操作   单词   首字母   分享   循环结构   语言   常见   for循环结构   

原文地址:http://www.cnblogs.com/wsw-bk/p/7616834.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!