00:00
那我们接下来开始实战一下各位啊,来PSVM在这里呢,我们写一个闷方法,一会我们测试一下,假如说现在有个数组,我们这个数组呢,现在呢,就是随便写一个吧,啊比如说呢是100,然后200,然后是230,然后是二百三十五二百三十五,然后呢啊再来比如说600,然后呢,再来一个1000啊比如1000,然后再来什么呢?再来个2000是吧?哎,咱们再来一个,比如说啊999。9999啊,999行了,那么接下来这是一个数组,各位啊,我们要找谁呢?找出AR这个数组中啊,比如是200所在的啊下标,那这样的话我要找是不是应该是。调方法,各位是不是调用方法啊,哎,调用方法啊,调方法就行了,现在这个方法你是不是在这还没写呀,哎,没写吧,哎,没写这个方法没写的话,你可以直接调,假如说这个方法叫二分法查找,对吧?Binary啊binary search2分法查找。
01:09
去谁里边查,各位是不是去AR里边查查什么,查这个200这个元素所在的加标,最后返回它所在的标吗?是不是啊,哎,输出啊,然后呢,如果index要等于等于负一的情况下,我们认为什么呢?这个元素怎么着啊,该元素不存在是不是?哎,其他情况的话,就是该元素下标是多少啊,哎,Index啊这个代码的话,跟刚才实际上还是一样的,这个方法没有out加回车,你看多棒是不是out加回车,哎呀,到哪了这个方法。哎呀,直接直接导进来了是吧,哎呀,直接导进来了,嗯,来再来。他直接给倒进来了,哎呀还不行,就算公司它有这样的一个。
02:00
告诉大家一个好消息啊,这个慈善公司已经写完了。嗯。已经写完了,有这样的方法。来,我随便再加个名字,再加个二啊,为了防止冲突啊,来把这个地方咱们再改一下呗,叫班research行不行?测试啊,来把它改一下,这个呢,我们想省懒劲还不行是吧?好,这是我们要查找的这个元素啊,Element。Element或者是目标啊,目标元素return一个负一吧先啊好,这边注释写上。啊,这个大家应该能看懂吧,就这个方法调的是这个方法啊,然后这个数组是不是就传过来了,从那个数组里边是不找这个目标啊,是不是找目标200啊对吧?哎,那么最后返回这个目标元素的下标吧,对不对?哎,这是从什么呀?从目标从数组中查找什么呀,目标元素的什么下标。啊叫下标啊,然后这个是被查找的什么数组啊,这个必须是已经什么排序的啊,这个必须是已经排序的数组啊,然后这个目标是什么呢?这是一个目标元素吧,然后。
03:13
参数不传下吗?参数传下边,传下边干嘛呀。参数传什么下面啊。你不就从这个数组里边找这个元素吗?从这个AR数组里面找这个目标元素吗?对吧。返回的就是下标,返回的是下标啊,参数是值啊。参数是值啊,来没必要用递归啊,用递归干嘛呀,对不对,递归效率多低啊,来返回什么返回什么呢?返回这个大于等于。返回负一吧,表示该元素不存在啊,其他表示返回该元素的下标啊,下标来,那么这一块我们应该怎么做呢?各位大家想一想,我们通过这一个数组,这已经排序的各位啊,从小到大排序,然后通过这个数组找这个200这个元素对吧?调的是这个方法,在这个方法里边有这个数组有被查找的元素,那我们从这个数组里边找这个元素就行了。
04:21
对不对啊,找到元素就行了,那么这块该怎么怎么写啊好,开始下标是几个位。Begin。是几啊?零吧结束下标是什么?这个结束,下边是是谁,是不是我们这个数组点Les减一呀。那中间元素下标是几啊,Middle行吧?啊middle啊简写了啊middle中间,那中间元素的这个下边是不是就是begin加上去end加完之后呢?那它括起来,括起来之后怎么着,除以二。
05:04
哎,大家看啊,我们这一块是不是开始元素,这是不是结束元素下标啊,那中间有下边是不是开始加上结束除以二对吧?好拿出中间这个元素吧,那中间元素下标之后呢?AR中间这个元素如果恰好等于等于什么,你要查找到这个目标这个元素的话,那我得恭喜你,这个是不是就。完美了是不就完美了对吧?哎,这种情况是不是返回middle就行了,这个位置是不是就是我们要找的,大家好好想想,如果这个二瑞尔这个数组middle中间这个元素如果等于等于目标,那正好,那现在是不是这个middle就是我们要查找的元素的下标啊,那else if,如果说还有一种情况就是说我们AR middle这个地方对它要是万一大于它呢?大于他应该怎么做。各位。好好想想,或者小于它小于目标,先说小于吧,先说小于,如果中间的这个元素它小于目标,那应该是目标在,目标在哪啊?目标在中间的右边。
06:17
在。中间的。右边因为小于目标嘛。对不对,哎,小于目标,你中间这个元素小于目标,那这个时候我问大家开始下标是不是得开始元素下标需要发生什么变化吧。开始元素的下标得变成什么?得变成什么?加一对吗?是不是大家想一想,思考一下?开始元素的下标,得重新赋值吧。
07:01
开始元素的下标需要重新赋值,开始元素加标应该是米加一,那L这一块执行到这儿,你想这个是相等关系,这个是小于关系,那这边一定是什么呀。一定是一定是什么应应该是A怎么着大于什么,那目标在什么在中间的。在中间的左边。你L应该是这个是目标是大于这个,呃,中间元素是大于目标的,那应该应该修改什么?修改结束元素下标吧,哎,开始元素下标不用管是修改什么呀,修改结束元素的什么下标,结束元素的下标等于什么呀?End,现在end等于这个middle怎么着啊,减一。
08:09
好的,大家想一想是不是这样的?好,那我问大家这个需不需要循环。需不需要循环,各位循环扩到哪儿?循环什么时候结束?循环扩到哪?循环什么时候结束?各位告诉我。这个开始和结束就不用扩大扩进去了吧。是不是应该有个循环,各位是不是这边。大家思考一下。而这个循环的结束条件是什么?Y循环begin小于等于N。
09:07
只要是就是开始,永远都得在结束的什么左边。只要它的开始还在我们结束的左边,我们就可以继续往下循环。是吧?大家思考一下这个你你有没有发现这个begin它一直都是在加你的,是不是一直在减。你begin在一直变大,N在一直变小,但是这个循环的前提条件是你的begin在左边。对吧,Begin得小于什么呀?End吧,哎,Begin得小于N。
10:02
就这个代码,它是什么意思呢。就是开始元素的下标。在增加吧。一直增。是吧,这个呢,是一。对不对,开始元素的下标,只要在什么结束元素。下标的左边。就有机会继续循环。你想是不是这样的?开始等于零,结束等于它,只要开始是小于等于N的,那开始加上它来除以二,算出middle,然后怎么着呢?比较相等关系,就返回这个middle啊,如果小于它的话,把begin的值改一下,改成middle加一。
11:03
嗯。开始就是米度加一,其他情况就是N的改一下,N等于M度减一。对吧,哎,总之下一次再进行循环过来的话,哎,你注意啊,这个千万不能扩进去,如果你扩进去的话就麻烦了啊,就麻烦了应该是在外边啊,最初声明一个开始的和一个结束的,在这里边呢,这个begin的一直加,这个end一直去减,然后接下来呢,在这循环循环begin,只要是小于等于的情况下,我们认为这个循环就可以继续往下进行。啊,那如果说它的begin一直在加,一直在加,End一直在减,最后发现这个条件都失败了,哎,循环就结束了,循环结束的话,那证明证明什么呀?证明这个集合里边不不是证明这个数组里边没有这个元素,没有这个元素的话,我们就返回负一就完事了。啊,负一来我们运行一下。呃,被查的元素是一,大家看下标,下标是一。
12:03
对吧,这是零吗?这是一吗?是不是,哎,那如果你要查的是100呢,你查100这个元素的话,它就是下边是零啊来我们查一下。零是吧,哎,那如果说这个100这块我们变成什么,变成9999呢?来我们找一下最后一个元素,看能不能找到。好,大家看是不是701234567嘛,是不是,哎,你要找的是这个230。230来再走一个。230012,它下边是二啊就对了,那么这个呢,就是关于我们的一个二分法查找各位啊,二分法查找的算法就这样写就行了,不要用递归啊递归呢,效率这个太低了啊,效率太低了尽量不要用啊,能用循环就用循环啊,不要用递归好,那么这个呢,其实就是说通过这个数组啊去查找这个元素,它采用的方式是什么呢?是折半的方式啊,折半的方式来不断的缩小范围啊,缩小范围就建议你在查找的时候,不要一个一个过,一个一个过,一个一个过啊,那么我希望大家能拍个照片啊,能拍个照片,能把这个题目拍个照片来,我这个范围缩小一点啊,你在这里呢,拍个照片来,现在拿起你的手机啊拍一下照片。
13:16
那就这个,因为这个以后我们基本上也不需要我们写啊,三个公司已经写好的,我们直接调就可以了啊,直接调用就行了啊,来截图行啊,拍照也可以啊。
我来说两句