00:00
说现在我们有这么一个。空间,所以现在呢,老师有一个数组,有一个数组先分一下冒泡的冒泡啊。冒泡的一个,呃,一个这个算法吧,叫算法也好,叫规则也可以啊,叫规则也可以,那注意听讲啊,好,我们放到这里,现在我有一个数组了。扔一下,把它刮起来啊,刮起来。然后呢,我的宿主先前长的就是这个样子,AR等于这个好长的这样子,我们先在看它是怎么做的,它所谓冒泡,其实核心就是经过不断的比较,把这个大的数扔到最最后面去,然后呢,再找第二个最大的数放在第个第二个位置,然后以此类推,所以说我们看他第一轮第一轮啊第一轮。第一轮的这个排,第一轮的这个这个这个排序。好,这个呢,其实也就是我们所说的外层排序,外层啊,外层排序怎么做,请看第一次比较,第一次比较。
01:09
注意听第一次啊,这样写,写个数字,第一次比较。他怎么比较呢?来老师用这个比较通俗的方式,我现在用两个箭头。我现在用两个箭头,各位用两个箭头。啊,分别去啊。耶。喂喂。喂喂喂。啊,他这是离得远了一点啊喂喂。好好同学们看,现在呢,我把这两个箭头标成不同的颜色,一个绿色,一个绿色啊,一个这个蓝色,那么他第一轮比较他是干什么呢,注意听。
02:00
他呀,让24跟就说20,它它原先是这个数组嘛,然后呢,他让这个24跟69进行比较。看它前面这个数有没有大于后面这个数,如果大于呢,它就交换,它的规则是。让。让什么呢,前面的这个数。前面的这个数和后面的这个数进行比较比较。如果前面的数大,前面的数大,则交换。交换,那那也就说前面这个数大才交换,前面这个数不大呢,那当然就不交换,所以第一轮比较完了过后呢,其实这两个没有变化,因此它的宿主长的样子呢,还是这个样儿。就第一次比较,第一次比较过后呢,还是长这个样子,但是我们宿主呢,就已经到这儿来了,于是乎这个蓝色的往后面挪一下,绿色的也往后面挪一下。
03:11
他这个指针往后面跑一跑,但是怎么跑的,我们先不管跑怎么跑的啊,跑我们用代码实现,先说思想,当他这样比完了过后,诶进行了,再进行第二次追听,第二次比较追听啊这个地方讲一次比较,那第二次比较过后呢,各位同学,他又让69跟80进行比较,诶如果发现69比80大呢,就交换,但实际上呢,仍然没有变化,老师为什么没变化,因为69并不大于这个80,于是第二次比较过后呢,它仍然得到这个数据,好此时此刻又往后面挪,蓝色的往后面挪一位,这个往后面挪一位,好进行下一次的比较,第三次比较。第三次比较。比较的话,其实就是让80跟57进行比较,此时此刻80必然大于57,于是这个比较完了过后呢,得到的结果是。
04:11
这个样儿的这个80就跟他发生了一个交换,至于怎么交换的,大家应该能想到好,80到这好,也就是说第三次比较过后得到的数据是这个,于是这个蓝色的又往后面挪一下,绿色的往后面挪一下,进行第四次比较。第四次比较好的,第四次比较过后呢,80又大于13 very good,于是乎整个这个相当于说80跟这个13进行交换,13。80好,各位同学,当比较多的时候,这个男士再往后面挪的时候,已经没有必要再挪动了,没有必要再挪挪动了,此时此刻,经过第一轮的40比较过后,80的这个数就已经明明确确的定下来了。
05:01
也就是说80经过这个第一轮的四次比较,最大的数已然搞定,也就第一轮比较的结果呢,是找到了最大的数,那么第一次比较过后呢,进行了,紧接着又进行了我们的第二轮比较,第二轮比较为什么第二轮呢?就是因为它又要从前面开始了。各位同学,于是他又。回到这个最前面。最前面进行比较,好,这个进行比较过后呢,得到的第二轮的第一次比较是结果,是第一次比较的结果,其实很遗憾啊,他还是因为24呢,不大于69,所以说他在第二轮得到的结果啊,第二轮的第一次呢,他得到结果还是这个,但是注意啊,80这个已经确定下来了,所以在这一轮比较过后呢,其实得到这个,于是他又往后面挪动啊,往后面挪动,往后面挪动呢,又来了第二轮的第二次比较,注意看同学们看啊,待会规律出来了,第二轮比较过后,这个是69跟57进行比较,Very good,这个时候69将会挪到这个位置来。
06:12
69 57进行交换,交换过后蓝色继续往后面挪一位。挪移位过后进行我们的第三次比较。第三次比较。第三次比较,OK进行第三次比较过后呢,69海底13大,于是乎这个这个红色标出来,红色这个是已已经确定了啊,69跟13比较一比较,发现69:13怎么样大,OK交换。此时此刻,这个交换了13。和69交换,交换完毕过后,同学们此时刻69确定下来了,80也进去了,这个时候呢,他不会再进行这两者的比较,为什么?因为刚才80已经是最大的,所以说。
07:00
没有必要再比较了。因为80刚才已经最大了,还去比较没有意义,因此第二次其实只是进行了三次比较,就已经把第二个最大数确定下来了。于是进行了第三一次的第三第三一轮的比较,各位于是他又进行第三轮,我们现在先不说代码怎么实现啊,先把思想搞明白。好,第三轮,第三轮的时候呢,它是建立在第二轮的第三次这个结果基础之上的,于是乎他又扔到前面来。各位朋友,那么这个时候呢,进行我们第三轮的第一次辟谣。第一次比较OK,朋友们,那现在这个24跟57,显然24并不大于57,于是乎这个结果呢,其实仍然是保留原先,原先这个不动的啊,但这个两个红色我还是把它标起来啊,这个比较完了之后还是它,那这个时候又往后面挪一挪。好,进行我们第三轮的第二次比较。
08:05
第二次比较,大家看到有有点像冒泡的感觉了,就是它不停的往上往上往上浮动啊比较这个时候比较呢,大家看就是57跟13比较,当然57是大于13的,OK,结果显然。经过比较完了后,57大于13嘛,那我当然没什么问题,把57往后面挪一下,把13进行交换,好十十个。这三个数又确定下来了。那么这个时候还有没有必要往后面挪动呢?没有必要了,因为你刚才那个69经定下来,没有必要再比较,那再比较你那傻了,对,没有必要,但是你要比较,其实比较完了过后还是这个变不变化,所以说很不划算,所以说到了第三轮的时候呢,我们发现已经把第三个最大数确定下来,没有结束,紧接着继续往下走。进行了我们第四轮的开始的比较,各位朋友。
09:01
第四轮的比较。那么第四轮比较呢?进行我们第四轮的第一次比较。第一次比较OK,第四轮第一次呢,建立在第三轮的最后那一次的基础之上,也就说第三轮完了过后,其实数字应该长这个样子才是对的,那此时此刻没问题。他又把光标引用24跟13比较,24跟13比较,当然24是大于13的,于是他将24跟13进行一个交换,注意看啊,它原先这三个数已经是确定的,那这个时候24跟13比较呢,24跟13发生交换。这个时候都同学们看啊,这个时候后面再也没有必要比较了,因为57都已经,所以说24这个位置也确定下来了,那么同学们想一想,还有第四轮比较的必要没有。没你13洞,你13已经最后一个了,还必杀。没必要,必要,所以说我们看到这篇规律,同学们看到规律已然是跃然纸上。
10:06
但有什么可说的,我们发现这个规定是你有五个数据,我们进行了四轮比较,而且每一轮的比较在逐渐的减少,是这个意思吧,这个东西你把它翻译成编程语言就行了。好的,来老师把这个规律稍微的再次整理一下。最近。注意,我们从这里看到了这个比较的一个特点是我们总结一把什么呢?冒泡,冒泡排序的一个规则。第一次我们发现呢,它一共经过了四,经过了就是你的数组的大小减一次的。外层比较就图的大的比较吧,比较大大比较大大的比较啊说一共会。
11:03
会会经过。经过什么呢?经过你的数组啊,假设我们叫呃叫啊二点。这个稍微的。再放大一点,大家可能看得不清楚啊,所以放大一点点,经过N减一次。依次的。外,呃,那个大循环吧,或者那个那个外外层的。经经过N减一次的这个这个这个轮数的比较轮数啊轮数比较。那么每一轮将会确定一个数的顺序。每一轮。每一轮。将会将会确定确定一个数的位置,哎,将会确定一个位置,这是第一个特点,第二次特点呢,发现每一轮的比较在逐渐的减少。
12:09
每一轮的,每一轮轮的这个比较次数在逐渐的。逐渐的减少,诶它在逐渐的减少,那怎么减少呢?你看这个次数是4321。他这样子不停的,第一次是四次比较,第二次第二轮是三,第三次是。两次比较,最后一次是一次比较,你看这样子就就有这样一个规律,就有这样一个规律,然后呢,我们再来看第三个特点,就是当发现发现前前面的一个数比后面后面的一个数大的时候的时候,就进行交换,就进行了交换。
13:07
完了。你看有些有些书上,他这个讲的很复杂,其实说白了就是这么一点点东西,但是如果我们没有这个图的支撑,我直接把这个抛出来,我可以告诉大家,几乎你不知道老师在说我们说什么,所以我的思想是当我们遇到一个比较复杂的问题,是同学们可以适当的把这个东西写一写,因为我们人的思维啊,就是今天这位朋友有我分享。他说他说这个写完了过后,写完了过后还是有点空空荡荡的感觉,搞清这个东西。还没有深入到自己的血液,没有深入到自己灵魂里面去,原因就是说你现在还有一个很形象的思维,当你有一天看到这个。排序或者一个东西的时候,你脑海里面就出现了这个东西,好,那我恭喜你,你整体这个思维就很很形象了,所以一般我我我跟大家讲我讲我我我我在做一个东西的时候,我往往会在想他是一个大概一个什么结构,比如说我们说我们说这个HTTP协议。
14:15
啪,一个协议过去了,那么我在想这边是一种什么形式在发,那边是怎么来接收,接收到了他又做什么处理,最后又回来了,整个这个线它很清晰,所以说你你在做东西的时候呢,你就感觉到不空大,如果你没有这个东西支撑,你就感觉很虚的好,但是这个呢,需要咱们。多练习好了,同学们,规则咱已说完,下面就要做一件事情,把刚才老师做的这个东西翻译成或者写成咱们这个可爱的代码。OK,这就是说翻译了,来那有的老师你这个东西我突然有点感觉思想我明白代码真的有点难写了,来你看老师又教他第二招,我教你们第二招啊,你们先不要去管第几轮,你们现在先把第一轮给我写出来,我只要求你做一件事情,你把这个数组里面最大的给我排过去。
15:12
这个只需要一层循环,连双层循环都用不到。这个应该没问题,所以说我的思想是怎么写这个代码呢?第一步我们先写一段代码,能够把最大的数带过去。所以说先。先写先完成,先完成什么呢?完成能够将最大的数。最大的数放到。哎,放到一个那个那个和像就是把最大的那个数放到最后。最后对吧,然后我再你再让你写第二段代码,把第二大的,把第二大的数放在放在倒数第二个位置。倒数第二个位置好,然后以此类推,最后你会发现有一个规律,你会发现有个规律,然后规律啊,你找到这个规律,然后再把它整成一个双层负循环。
16:14
然后整成一个多重循环,多重循环告诉大家啊,这个是一个很重要的一种思想,这个思想你有了过受益啊,同学们你看老师在一起你发现哦,这个冒泡排序我不要你说我也会写出来的。我只是写的时候我不想愣写的,先写外层再写里层,其实我们这种思维刚好是错的,他应该是先写里面再写外面。明白,所以有时候我们这个思维,计算机的思维往往跟我们人是反的啊,OK,那现在呢,我们不说废话,赶紧走代码。
我来说两句