00:01
好了,同学们呢,咱们开始上课啊,首先呢,我们还是把这个数组这一块呢,还有一个叫做二分法查找这个东西,我们来看一下好吧。二分法查找各位啊,什么叫二分法查找呢?就是说我们呀,查找一个元素的时候,有多种方式是不是哎,有一种方式是什么呢?是我们从第一个位置开始往后找是不是哎,但是这种方式的话,我们效率比较低一些啊,效率比较低一些,来我们来看一下啊。呃,在。这个idea当中啊,我们这个package包下,我们去out insert,我们去新建一个class。那么这个class呢,我们就叫做嗯,Search吧。啊,叫search。这一看就是数组查找呗,是不是啊数组查找。数组的元素查找啊。
01:04
好是这样的啊,就是首先第一个数组元素查找有两种方式啊,第一种方式是什么呢?是一个一个挨着找。啊,直到什么呀,找到为止啊。为止。第二种方式是什么呢?是二分法查找。啊,这是一个算法啊,这是个算法叫二分法查找啊,这个效率较高。我们这个例子给大家演示一下,第一种方式啊,就是这个例子。演示一下什么呀,第一种方式什么意思呢?就在这儿呢,我有一个数组。里面的存了数据。对,然后呢,接下来我要找什么呢?找出87它的下标。
02:04
就是需求。是找出87啊的下标啊,如果没有。啊,如果没有什么呀,负一。啊,找出87的下标啊,如果没有返回负一就行了啊,就是说你从上面找,找了一遍没有87,那这个时候返回负一就行了啊,有这样一个需求,那行了,那咱们就就就。写吧,对吧,一个一个挨着找,怎么找啊,一个一个挨着找。那就负循环呗,I等于什么呀?零是不是I小于什么呀?叫做AR点什么呀?Lengths吧,I加加,那你每循环一次,是不是从数组里面下标为A的位置上找这个元素啊,找到这个元素之后,你是不是判断一下呀,如果说这个元素要怎么着,等于等于多少,哎,87的话,哎,那么我们认为现在这个元素的下标是不是找到了。
03:02
对吧,啊,元素下边找到了啊。来我们输出什么呢,就是说87。啊,元素的下标是多少啊,是I呗,是不是,哎,因为你A嘛,下标这个元素等于87吗?是不是,哎,87元素的下边是I,那这个时候呢,我们程序就结束了啊,就结束了。啊,然后放行官,如果程序到这儿对吧,程序执行到此处。啊,表示没有87,因为你成功的话,我就return结束了呀,那方法结束了,是不是到这儿的话,就代表这个这个87是没有的,那没有的话我们就直接输出呗,对吧?啊输出什么呢?就是87不存在。走。我们叫87。不存在。不存在该元素。该元素啊,那这个执行一下,或者从。
04:03
这运行啊。从这运行,嗯。我们来看一看它能不能找到这个下标。它下边是三是不是,下边是是不是三啊0123嘛,是不是你从里边,你从这个里边找100,你看这个100这个元素,咱找这个100这个元素。对吧,100元素应该是没有吧。是不是,哎100元素没有,没有的话咱们执行一下。你看一般不存在该元素是不是,哎,那么接下来我们把这个呢,抽象成一个方法,各位。抽象成一个方法啊,就是这个这个这个代码,咱们能不能写个方法出来呀。就像我刚才所说的,怎么说的呀,我说呀,一个一个找是不是,哎找到呢,就返回下标,找不到就返回什么呀,负一。我们能不能单独写一个方法出来,专门去负责搜索?
05:03
那么大家分析一下这个方法,我们应该传什么参数,返回什么值?就最好啊以上的程序啊,封装一个什么方法。对不对,哎传思考一下传什么参数啊。返回什么值啊。对吧,嗯。传什么传什么,各位啊,应该能猜测出来吧,因为你要查找嘛,你从这个数组里边查。你从这个数组里面查,所以你要把这个数组传进去,你从数组里面查哪个元素,你是不是要把这个数组当中的元素给它返回啊。对吧,哎,所以说要传什么呀,传两个吧,哎,第一个参数。是什么呀,是。被查找的什么啊,第一个参数是数组,第二个参数呢。是被什么查找的什么元素吧,啊查找的元素,那返回值返回什么呀?返回值是什么呀?啊返回诶。
06:06
被查找的这个元素的下标返回被查找的这个元素的下。对,如果找不到返回负一,如果找不到啊,返回负一呗,负一就表示不存在啊,你可以这样去去去设设定一下来,那这个方法你就嗯,就叫research吧。行吧,叫数组查找啊research research呢这块呢,你就查把这把AR这个数组嘛,传进去。是不是上面有AR这个数组啊,找这个87,找87这个元素。最后返回什么下标吧,是不是?哎返回下标,如果index要等于等于负一,那条件成立的话,表示什么呀?表示该元素怎么着?哎,不存在吧,哎不存在,那其他情况的话,是不是代表该元素的下标就有了。
07:04
对吧?哎,你说该元素下标是多少啊,哎,Index。嗯,Index等于等于负一,该元素不存在,哎呀,写写写错了写错了啊。三步运算符啊好,大家看这个能不能看懂啊,这个爆红是什么原因?我今天教大家这个爆红是什么原因,各位爆红什么原因?就上面这个能看懂吗?是不是就是写一个for循环,然后叭叭哒哒一顿循环循环一顿找,找到话咋地咋地,找不到的话咋地咋地,你下边这边是不是这位search,然后把这个上面的数组是不是传进去,然后把这个87,你看分析嘛,我们要写一个方法,是不是上面是这样写代码来下面想封装一个方法,通过这个方法我干啥呀?去这个数组里边找这个元素,返回这个元素的下标吗?如果返回负一就代表什么呀,不存在呗,如果哎嗯不是负一就返回什么,它所在的个下标吗?
08:05
是不是啊,这个爆红的原因是因为这个方法没有明白吧,是没有这个方法,我今天教你这个啊,出现红色,你可以把这个方法建出来,你不用写怎么做,各位看好了啊,光标停到红色上,Out加回车。下边有个create method这个单词什么意思?创建方法你点一下,诶,这个方法就有了,各位啊,神奇吧。神奇神奇的话,打个一来各位扣个一啊,扣个一来这块啊,他一个默认的是什么呢?是一个public啊,是默认的是private,各位我们这块可以给它公开啊,Public public就这个方法你都可以不用写,将来你就是你先写上,写上之后的八,哎,你给它生成一下,这是没有任何问题的啊,没有任何问题的,从这个数组里边找这个元素。找这个元素的话,那你就for循环就行了,对吧?你循环谁in,呃,循环来这个叫element吧,假如说element啊,你要找的是这个元素,假如说那重新再生成一下这个for循环for,然后呢,从I等于零,I小于什么这个数组点什么呀?Les,然后I加加是不是?然后接下来我们判断一下,如果说element要是这个等于等于什么呀?我们AR下边为I这个位置对吧?就如果说我们这个元素被查找,这是那个数组吗?从那个数组里面查这个元素吗?
09:22
对吧?从这个数组中查这个元素,那你这个元素如果在变历的过程当中,等于这个数组中某某一个元素的话,那return I就行了,对不对?Return那个I下标是不是就行了,这个I如果正好相等是不是这个I下标正好就是那个元素啊,所以返回I就行了啊,如果程序到这儿的话,返回负一。你想如果这个执行方法结束,如果这个没有执行,这边必然会执行,这边如果执行的话,那法官负100就代表没查到是不是,所以这个方法呢,你可以写上一个注释。注释,对不对?这是从什么呀?数组中检索某个元素吧。的下标吧,哎,检索某个元素的下标是不是,这是被什么检索的什么数组吧,哎,这个是被检索的什么被检索的元素吧,是不是返回一返回一返回。
10:13
大雨。返回大于等于零的数。表示元素什么呀。的下标。返回负一。表示该元素怎么着啊,不存在,你在开发中你要写好,写好这个注释的啊,将来呢,生成帮助文档啊,或者说别的程序员在读的时候呢,要能够很很轻松的读出来,你这个方法是干什么的,你这个方法这个参数是干什么的,这个参数是干什么的,这个方法最后执行结束的返回值是代表什么意思,对吧?哎,你要写清楚这个东西啊,行,那这样的话,我们经过一个封装,哎,我们这块能不能找到呢?我们运行一下应该是没问题的,应该还是三八。
11:02
该元素下边是不是三啊,87嘛,是不是你要找一找这个数组里边八,你找一下八找八的,把这个八八十七改一下,改成它来执行。好,来看是不是四啊,哎,你想找不着这个里边的五来,那咱们找一下五。这五啊,然后咱们再执行。是吧,哎,那有同学老师,我这里面有两个五怎么办?我都是五,他找的是哪个五啊,找的是第一个五个位啊,因为我这个for循环在循环的时候,它的下边是从零开始。明白吧,哎,所以说你这里面有相同元素的反馈是第一个元素,第一个元素出现的下标,第一个元素出现的下标啊。所以这个方法它返回的是什么呀,返回的是第一个元素的下标,如果你有第二个元素的话,那对不起,那这个就呃拿不到了,对吧?哎,主要反馈就是第一个来走。
12:04
嗯。你看该元素下标是一对不对,哎,该元素的下标是一。没有任何问题吧,因为零嘛,这是一嘛,是不是,哎是这样,那么这个呢,我再说一下啊,这是比较笨的一种方式,就是一个一个挨着找,直到找到为止是不是,哎,直到找到为止啊,那么第二种方式是什么?是二分法查找,来我们一块看一下这个二分法查找是怎么回事,好吧。
我来说两句