00:00
好,同学们,刚才呢,我们就把这一个冒泡算法的规则给大家详细的介绍完毕,是不是好,现在我们要做的是事情就是这一步了,既然我们有了思路,或者说有了思想,我们就把它变成代码就完事了。来把刚才我们辛辛苦苦画的这个图呢整理到笔记里面来,这个呢,我们讲了一下冒泡排序的冒泡。冒泡排序。排序的一个思路分析。好把这块呢,我们整理一下,就是我们的标题二,整个这个思路啊,在我们这个Excel表里面就说的非常的清楚和到位了。这块大家要非常清楚啊,现在我们就是要把这个思路,或者说我们写的这个整体的这个规则,把它翻译成我们的代码,大家跟上老师思路。对吧,既然有了这个东西,那下面呢,就是走代码了,来,我们写出冒泡排序的代码。
01:04
冒泡。冒泡排序。排序的实现。好,来,同学们跟上老师思路。来一个标题二,那打开我们的Vs code,我们新建一个。我们新建一个章节,因为这是第八章了,对不对,我们新建一个章节来叫chapter。CHAPTER08。在这里面我们新建一个文件夹,叫什么呢?Bubble BU BB b BB Le bubble sort。BB就是冒泡的意思,冒泡排序,那新建一个文件may.go。好,前面这一部分我们还是老规矩,Package me。那因为待会儿呢,要输出我们引入一个。最常用的包,Format包,然后写上我们的主函数,好写完。
02:01
那现在呢,老就老师就要开始写这个冒泡了啊,冒泡排序开始写了。冒泡排序。好,嗯,我们就按照刚才的这个分析的思路,一步一步实现这个数组,我们要事先定下来这个数组没问题吧,我们先搞一个这样的数组。好在主函数我们先定义一个数组。好,或者叫声明啊,都可以定义。定义数组。好,这个数组呢,我们就这样写。走,然后呢,数组的大小就为五吧,我们也不去搞新鲜的东西,就搞这个东西就行了,好这个数组,然后呢,我们把这个数组传给一个函数对不对?然后将数组传递,传递一个函数给一个。一个函数。完成排序。
03:01
好,那这个函数呢,我们就开始写了thankyou,然后叫b b Le bubble sort。那同学们想一想啊,同学们想一想,因为我们知道数组它是直类型。大家还记不记得数组是直类型,既然数组是直类型,那么我们这个地方想在函数里边去修改外传入的这个时参是不是应该用指针来接收,还记得吧?我这写了啊心。五。In,没问题吧,这个地方就是一个指针,这是指向数组的一个指针,那就说这个A和这个传入的A将会是同一个A了,能理解吗?这样子的话,你在函数里面进行了排序,才会影响到main里面这个A这个变量能理解啊好,现在呢,我们来。先把这个排序前的数组打印出来给大家看一下。
04:01
For print een。好,来排序前。来我们输出来,那输出的时候呢,因为它是一个指针,因此我们要进行取值运算,还记得吧。就是对它进行一个取值运算,然后呢,我来调用它一下。Bubble sort。Bubble shot,然后呢,我把这个AR传进去。没问题吧,好,我们来运行一下,看看目前是个什么样的情况。CAD点点CD到。点点我们CD到零八。然后CD到我们刚才写的这个叫bubble。好,我们看代码好像有问题。这地方应该传一个地址对吧,因为这边是指针,你不传地址那肯定是不行的。好,我们来运行一下go round。妹,点go跑起来。
05:00
我们可以看到在排序前呢,它是一个无序的数组是吧,是一个无序的,好,我们现在来完成第一件事情。带来,首先打开我们的Excel表,我们来完成第一轮的排序,哎,各位同学,我现在要求大家把80排在最后一个,大家能能写出来吗?先不要去看第二轮,第三轮不要看,你就看第一轮。第一轮是不是有四次比较?它刚好是数组的大小减一,而且是一个负循环就可以了,也就是说第一轮这个段代码把80排在最后,是不是写起来还是比较容易的呀?比较容易吧,来完成第一次排序。注意跟上老师思路。完成第一轮。第一轮。第一轮排序。也就是我们的这个外层培训。外层第一次。那同学们想一想啊,同学们想一想,那这段代码是不是直接一个负循环就搞定了,比如说我用J等于。
06:09
零。接。解,小于几?同学们,它一共要进行几次?比较啊,是不是四次,那就写四。写四次,因为0123嘛,刚好四次好节加加。各位同学,在它进行比较的时候,是不是我这写清楚了,让前面的数和后面数进行比较,如果前面的数大,则交换好来怎么样怎么样,用if是不是就可以了?怎么样取到第D这个节这个这个数啊,是不是这样写二。先把它做一个取值运算。然后。来勾,如果它大于后面这个数。这个能看懂吗?
07:00
这个应该不难吧,如果大于这个数,所以说明前面这个数大于后面这个数,然后就怎么样交换。是不是交换?好,既然要交换,我需要一个临时变量,因此呢,我先定一个临时变量,这个没毛病吧,Temp,比如说等于零。我这是一个临时变量。用来做什么呢?做交换的,这是一个临时变量。用来做交换啊,用于做交换。用于。做。做成交换。好,那既然是这样子的话,那代码是不是就比较简单了,就temp。这个交换的流程我就不再多说了吧,咱们前面已经讲过好多次了,走,先把这个数交给他,然后。再把后面这个数。交给前面这个数没没问题吧,紧接着再把这个数。
08:02
让temp把这个数给他。各位同学。是不是就交换完毕了,也就是说当我们进行完第一次排序过后呢,我们可以看到第80这个数已经在最后了。啊,第一次排序第一次。我们一点点写啊,大家才能跟上思路。第一次排序后。数组变这个了,我们看看第一次排序过后,他是不是把80排在最后了,走一个。我们可以看到。第一次排序完毕过后,80的的确确放在了最后。没毛病吧,原先80在这儿排在最后了,好,同学们想,下面是不是应该进行第二轮排斥了?如果我让你们在这个基础上完成第二轮排序。第二轮是不是要把69排在倒数第二个位置,它里面进行了三次比较,来吧,这个代码有什么写头?第二轮。这是外层的第二次这个地方改成改成结。
09:02
是不是改成三,这里面要不要变化不变化,你看到没有,其实已经有规律吧,其实就是这个在变,上面这个四变三了,其他其他都没变,然后第二轮排序我们可以看到结果出来了没有走,我们可以看到第二轮排序以后。第二轮排序以后69。是不是又排在倒数第二了?是不是好?第三轮排序来吧,第三轮排序跟上老师思路,第三轮排序注意看。第三轮排序也是外层的第三次这个三变解变二里面要不要变化,不需要变化,来第三次排序过后,我们可以看到第三个数也确定下来了。大家看到看57是不是在它的位置了,再来第四次排序。第四次排序。第四轮第四轮。
10:00
同学们,看规律是不是已经出来了,这些一里面不需要变化吧?好,这是第四次排序。第四次排序过后再来走一个。其实这个时候呢,你看已经是个有序数列了,你看13 24 57 69 80,而且根据我们前面分析,其实一共也就四轮排序。是不是代码一写完了,诶同学们。我们的代码到此就写完了,这就是一个冒泡排序吗?显然不可以,如果说我们这个数组是五个元素,你这样写还可以假设我们这个数组是500个元素。500个元素排序,难道你这个for循环要写500次吗?肯定不行。而且同学们有没有发现。这有一个for循环,第一轮这第二轮,这第三轮这第四轮对不对?诶同学们有没有观察到老师刚才说的这个外层排序,其实它代码非常非常像,只是哪个在变化。
11:07
一个是四。一个是三。一个是二,一个是一,哎,我们能不能够把这个当做一个循环体,给它套一个循环是不是就可以了。是不是这个道理啊?大家看冒泡排序,你这么一想,是不是就很轻松,就很容易了呀?来,同学们,现在我们要做的一件事情就是把它给我。套在一个循环里边就搞定了。来,这些代码我通通不要了。这些代码我通通不要。因为刚才我已经把规律找出来了,我还要它干啥?你们看到规律不就是321吗?我通通的删掉不要了。不要了,但是你不要,你肯定只有一次排序,那是不对,然后你怎么办?整个用for循环,注意看,真正的变化来了啊,For I。
12:02
零。I小于几?你的大循环一共是多少次?你的大循环移动是不是就是你的宿主?你的宿主?心。这个数组的大小减去一个,一再I加加,然后将整个这个包起来。是不是把他包起来?诶同学们看是不是我这个循环把这个循环体包起来,但是包起来过后,你每次都是进行四次,比较肯定特别浪费,你其实你现在这个不改也可以,你不改其实已经写完了啊同学们,其实你这不改已经是个有序数列了,因为。因为你每次都比较四次,大不了就是有几次在那浪费时间嘛,浪费感情,其实你这样写已经是一个有序了啊,已经是个有序了,但是你每次小循环里面也去每次进行40不划算,而小循环里面是不是在逐渐的减少啊。
13:03
怎么减少的,是不是刚好是它的这一个长度,减一过后再减一个什么I。看I你第一次进来的时候是零,零的话,是不是这个N是五减去一等于四,但它第二次进来的时候I变一,I变一的话,就是相当于N是减一,再减一是不是就等于三呢?哎,以此类推,是不是这样子一下就把这个问题全部解决了?是不是好同学们,那老师最后一段代码就已经写完了。排序后。这么一写,冒泡排序法就全部完成了。来。这个就是冒泡排序。冒泡排序。一步一步推导出来的啊,我们是一步。一步一步推导出来的。没问题吧,那同学们,来,我们看看现在老师写的这段代码能不能真正的管用,保存一下。
14:06
然后呢,我们运行一把看效果。排序前。是这么一个数组,排序后是一个有序的,看到13 24 57 69 80。完全正确。好,同学们这样讲,如果同学们还听不懂冒泡的话,那就彻底的听不懂了啊,那我问大家,如果我要求大家做出的事,从大到小应该改哪个?如果我要把这个数组,现在他不是从小到大吗。我要把它改成从大到小排序应该改哪是不是只要把这个改成这个符号就是从大到小了,对不对,我们运行一下。你看这样一写的话,其实就是从大到小排列代码写完。啊,代码写完了,好,我还改回去啊,改回去好了,这就是我们冒泡排序的整个流程,那同学们传进去过后,我在主函数里面也来打印一下,我说主函数里面数组等于二,请问这个时候有没有血?
15:12
他这里面有有序没有。有没有事?有序没有肯定是有序的,因为你是传的什么地址,那就说你是引用传递,那你传进去的这个A在里面的修改会直接影响到外面这个变量,是不是前面已经讲过好多遍了。是有序的。是有序的。那么我们来运行一下,看看外面的这个是不是也是有序的。我们可以看到外面的仍然是有序的,看到没有一模一样。好了,同学们,那么根据我们前面讲的这一系列的内容呢,我们相信同学们啊,应该对这个冒泡就有一个相对来说深刻的认识了,我给大家留一个作业,我给大家留一个作业,这个作业是要求同学们能够把老师写的冒泡这一个排序法默写下来。
16:05
就说不用看老师代码,你们也能把它很顺利的把它给我写清楚,写明白,能明白吗?好同学们,那关于这块代码呢,我给大家。把它放到笔记里面来啊,注意听。挖整个笔记给他整理一下。其实冒泡的核心代码就是这个函数是不是?好,这是第26。代码写到这26。往这边挪一下。然后呢,我们接着看下面27。好的。27行到最后一行。没问题吧?27行到最后一行。OK。好,这就是我们关于这个冒泡排序实现的一个完整的介绍和分析,希望同学们好好做一下,然后我这有个课堂课后练习。
17:02
课后练习,我写到这一栏。好,我把它放到这儿啊。这要求同学们要求。要求同学们啊。同学们能够能够什么呢?不看不看老师代码。老师的代码默写下来,可以默写。默写什么呢?默写这个冒泡排序。冒泡。排序法啊,这个呢,也是经常用来做笔试题的。笔试题啊,经常用这个来做笔试。好,请同学们好好的把它念一念好,那关于这一块冒泡呢,咱们这个排序,我们就给大家介绍一个冒泡排序。好,同学们呢,呃,可以把这个冒泡好好的消化一下。
我来说两句