00:00
那下面呢,我们来给大家介绍一下go浪里边这个查找是怎么完成的,各位哈,就是说我们在进行这个编程过程中呢,我们会经常用到查找这样一个技术。尤其是在我们去找工作的候呢,或者是面试的时候呢,也往往会问到查找这个知识,那在go浪里边呢,我们常用的查找方式有两种,一种呢,我们管它叫顺序查找。所以顺序查找其实听其名而知其意,就是按照这个顺序一个一个的比对,然后看这个数字里边有没有你需要查找的这个元素。二分查找呢,相对来说它这个效率要高很多,那二分查找呢,它其实是用到递归的这么一个知识点,就是说在一个有序数列里边去进行二分查找,也就是说如果你要用二分查找,它有一个前提,什么前提就是该数组。数组是有序的,如果它不是有序的,那么你二分查找不能使用,也就是说你要用二分查找,你可以把这个数组先进行排序,排序完了过后再用二分查找。
01:14
好,现在呢,我们来看一下勾浪里边的第一个顺序查找,我们来案例演示给大家。好吧,我们来一起做一下这个,呃,一起来完成这个查找。的讲解,呃,查找的学习。好,既然是查找,我们就给他一个新的标题二。那个标题二。好,标题二,给他一个。当然第一个我们做了一个基本介绍,对吧,做了一个基本介绍。就是在这个功能里边呢,常用查找有两种,一个是顺序查找,还有一个呢,我们叫它二分查找。那现在我们来做一个案例。这个地方我们给它来个标号好吧。案例呢,也给他来一个标号。
02:01
那我们看了有哪些案例,第一个案例我们来一起做一做。第一个案例哈,就这样子的。低。呃,有一个数列。有一个数列,数列就是宿主了,里面有白门鹰王、金毛狮王、紫山龙王和青翼蝠王。当然要求从键盘输入一个名称。就是你输一个名称,判断数列中是否有这个名称,要求第一个我们用顺序查找来,我们一起来做一下这个东西。代码。我们来代码完成。嗯,来,我们一起写写这个代码吧,先把这一个要求给它放到这个什么呢?数字里边去,我们新建一个文件夹好吧,叫做什么呢,查找就犯的嘛。Find DEMO。好,我们新建一个文件面点构。
03:03
好,Package一下,Package。Me,然后呢,我们引一个包包对不对,Format这个包包。然后呢,打一个主函数。然后我们把这个要求给同学们先放到这里来。那他既然要求用顺序查找,同学们啊,顺序查找,顺序查找就是按顺序查找嘛,那么我们首先来分析一个思路,思路其实非常的简单,就是定义一个数组。这样子啊,第一步我们肯定要定义一个数组。对吧,这个数组里面呢,存放的是这些信息,那大家看什么数组能够存放这些信息啊,肯定是一个字符串数组。对吧,字符串数组没问题吧。字符串数组,那第二个呢,我们应该从键盘输一个名称,从键盘。
04:02
或者叫控制台吧,控制台接收。接收一个名称,然后依次比对。依次比较。如果发现有。发现有就提示相应信息。就提示好代码分析非常简单对不对,那下边呢,咱们就代码来完成了。那首先我们先定一个数组吧,定一个数组非常简单,我们就叫就叫这个hero吧。叫人名names好不好?Names?等于一个数组,这个数组呢?我们有四个元素。是最类型的写进去,那我就偷一个懒了啊,同学们把这块粘贴拷贝过来,老师呢,就不一个个写了,既然你是宿主。是字符串数组,所以说我得用引号把它引起来。
05:00
第一个。第二个金毛狮王。第三一个紫山龙王对吧,第四一个青翼福王写完了。写完啊,第二个呢,我们从控制台接收一个名称。或叫名字吧,那首先我们先定一个变量,好吧,我们定一个变量v VR hero name。默认给他一个空。OK,默认给他一个空然,然后呢,我们就来。提示他一个兴趣,Print l。En,然后请输入要查找的人名。请输入要查找的人名,没问题吧,那现在呢,我们就用这个来接收一下,用scan。Len。艾特普。Hero name。完事,那现在呢,我们就就来做第一个方式啊,我们先用方式一。
06:03
方式,我们先用第一种方式吧。第一种方式。顺序查找。好顺序查找的第一种方式,顺序查找有好几种方式啊顺序查找。顺序。查找顺序查找。第一种方式。查找的一种方式,好,我们来一起写一写吧,各位朋友,嗯,怎么写呢?那就便利嘛,那可能就for循环了,For。我用一个。死循环在里边。我就开始找。如果。啊,这样子,呃,我们看怎么做,呃,用for循环,这还不能用死循环啊,就for也可以,用这个for循环也可以,咱们就一个个找啊I。I等于零。对不对,I小于N。把它这个数组的长度求出来,没问题吧?I怎么样就加。
07:03
那就比对吧。如果说。你这个地方输入的名字,它等于了等于谁呀。它等于了这个数组当前的。这个下标对应的值,比如说I,这就说明找到了,那我就提示一句话,Print。说找到。找到,那什么情况下没有找到呢?同学们想一想,而且下标是不是你也可以找到了,找到,而且下标四是不是也可以输出来啊。那用F提示找到了,找到然后呢,名字是什么,下边是什么,你可以输输出来找到谁呀。V下标为。下标。下标是多少呢?也给它输出来没问题吧,这样信息就比较全了嘛,那既然我找到了,肯定我把这个名称输出来下标是不是就是I呀。
08:01
找到,找到过后我们就break了。那么什么情况下没有找到呢?同学们动动脑筋。S行吗?如果说找到了,我们就提示这句话,没有找到是不是else不一定吧,因为你第一次进来的时候可能没找到,那第二次他可能找到了呀,因此你不能马上做else判断,应该这么写else if。谁呀?如果这个I,大家看,如果I等于了这个长度减一,说明什么问题?各位同学动脑筋。如果。这个I等于长度减一,是不是就说明这个I已经到达了最后这个元素,也就是说如果它D最后这个元素都还没进到这个衣服的话,那说明他找到了没有。说明他没有找到。是不是这个道理,你说你这个I已经到了这个长度。减一也也就到了最后这个了元素了。
09:02
是不是到最后一个元素,那就直接提示没有找到。提示他一句话没有找到。没有找到OK,没有找到谁呀,没有找到这个hero。没有在这个数据里面没有找到,好,既然如此,我们每个地方来给它一个换行。是不是这个没有问题吧。然后呢,我们来执行一下,看看这个顺序查找能不能顺利的完成。好,同学们,我们CD。点点。然后进入到刚才我们写的这个文件夹叫什么呀?我们这叫find。Go run main.go跑起来。这时它提示我们输入一个信息,比如说我输一个人的名字叫hello,这个应该是找不到,看到没有找到hello,我输一个找得到的。找得到呢,我是一个金毛狮王。金毛。
10:01
狮王。诶,没有哈。金。金毛狮王,哎,有回车找到没有。找到信号时髦下标为一,是不是下标为一呢?下边就为一好,第一种方式就完成了,但是这种方式大家看到啊,有点感觉有点笨笨的。感觉有点笨笨的,还有第二种方式呢,大家参考一下,我在写一种方式,大家看第二种方式怎么样,一般情况下第二种方式它是这样子做的,他的思路是这样子的啊,听我讲。他先定一个下标,他先定一个下标index。等于负一。什么意思呢?就说我这先定一个下标等于负一。如果我找到了呢,我就把真实的下标付给index,如果找不到,那index就一直保保持负一这个值能理解了吧?哎,那整个思路跟刚才唯一的变化就这变化一下。
11:05
在前面还是不变的,如果它相等了。这个地方我不写,我不写else。我就这样写的。怎么样呢,你看我这样写,如果就是说他在不停的循环嘛,不停循环,如果找到了,我就把这个index换成这个值。就是将。找到的值对应的下标。下标付给。付给谁呀?付给index就完了,是不是这个信息更清晰一点,就他不停的走走走走走,如果找到了就给他,然后break就完了。比刚才这个思路要更清晰一点,那到最后我怎么知道找到了还没有找到呢?我就比对这个index,如果这个index还等于负一。那说明没有找到,如果index不等于负一了,那说明什么?那就一定一定找到了,因为它只有找到的情况下才会进入到这个一一句是不是这个道理,好,最后这样写,如果index。
12:10
不等于负一说明找到了,然后把这句话呢。写一下就完了,那就这样写了,找到了值是什么?就这hero下标为几呢?下标就为inex。是不是这种思路也可以啊?我们就是我在开发时候,各位同学听我说啊,我还是推荐大家使用第二种方式,思路比较清晰。对吧,找到了就跳出来,并且把下标给他放在index里边去,最后通过index判断到底有没有找到,完事了。也很清晰,好,同学们,来我们看第二种思路是否能够成功啊,好,那我先把第一种怎么样,先注销一下,没问题吧,来朋友们,我们运行。我们运行潮州人民。比如我写个汤姆。
13:01
啊,汤姆肯定是没有的。呃,他没有找到,没有找到,我还没提示啊,到这来个S对吧,我提示他一句话。就说没有找到。没有找到。没有找到谁呀,把这个信息输出来就可以了。简单吧,没有找到,就他再来一次,跑起来。好,我还是输入汤姆。没有找到汤姆对不对,这次呢,我输一个找得到的。我这次输个紫山龙王。子山。紫山龙王。回车。找到紫山龙王了,下标为二,紫山龙王下标是不是等于二呢?看一下。的确等于二没问题,所以说这两个方式同学们可以任选,但是我推荐同学们使用第二种方式,所以说我在这里写一句话叫推荐使用。
14:04
推荐。对不对,推荐OK,好同学们,那关于在我们这一个勾浪里边怎么去进行顺序查找,我们就讲到这里也比较简单,对不对,找到一个就OK了,但是大家想想这个顺序查找它的效率是不是比较低呀。为什么这么说呢?大家想一想,如果我们这个元素很多,假设这是一个数字,比如呃,78911110121,那你是不是要把整个数组扫描才能知道有没有是吧?所以说呢,我们还有第二种。查找方式就是二分查找,那二分查找呢,我们待会再说,我们把刚才这个代码给大家整理一下。来吧。把刚才整个代码顺序查找的代码给大家放在我们的笔记里边来。这是我们第26行。
15:00
粘贴复制一把没问题吧。我们紧接着再来看第27行。下面的代码27。从这开始。好截取一下。OK。好,同学们,那关于这个顺序查找呢,我们就先给同学们介绍这里。
我来说两句