00:00
来,注意啊。我们来看这是参与比较的数据吧,参与比较的数据是不是这个好,第一次循环。我们需要怎么做?需要怎么做呀?九和八比较啊,这是八呀,这是九吧,是不是好,紧接着拿着九和十是不是再比较一次,但不需要交换位置,是不是还是这个德性好,拿着十和七比较,十大于七,十和七交换位置,所以这个是不是七。这是不是十对吧,好,继续往下,十和六要不要交换位置需要吧,所以这个就变成什么呀六。这个变成什么呀,十嘛,交换位置啊,十和零进行比较,是不是这个零要换到这儿,十换到这儿啊,十和11比较,但不交不交换位置。
01:04
不需要交换位置,你看见看见了吧,哎,你第一次循环,你好好看看啊。原始数据是这个吗?上来第一次八和九交换一次位置,九和八交换一次位置,交换完之后,哎,接着往下拿着这个九干什么呀。你需要干什么,跟这个十比较啊。但你比较一次不需要交换位置啊。这是一次比较啊,这是一次比较。明白吗?这个也是,这也是,这也是,这也是,这也是。啊,这个意思比较交换了吧。对吧,因为你原始是九和八呀,这变成八和九了呀,那你这九和十比较,你交换了吗?这个是不交换不交换吗?对吧,你再往下呢,再往下你这个十跟七比较的话,七得放在前面,所以这个交换了呀。是不是哎交换了,你交换之后呢,再往下你这个十跟六比较,那肯定在这儿也交换了呀。
02:03
对不对,哎,那交换完之后呢,十和零再去进行比较,比较的话,你十跟零肯定得交换位置啊,所以这个也得这个交换了嘛,哎,依次比较,然后交换,然后呢,这个呢。这个十和这个11 11是大的,但是你比完之后发现右边大,那就不用交换了,对吧,这个不交换,这就是冒泡,第一次冒冒出大的气泡,参与比较出去是这个。各位啊,是这个。第一次循环啊,最终冒出的最大数据在右边,11,听明白了吗?那此时我问大家参与比较的数据是什么?是不是跟11就没关系了?是不是这个数据。对不对。参与比较数据是变成他了,不是这个了吧。
03:03
那个11没了。然后接下来是不是进行第二次循环呀,这个第二次循环,首先八和九比较一次不交换。明白吧,然后接下来九和七比较一次,你得干什么,这个变成七,然后这个变成什么呀,九嘛,对不对,那九和六再进行比较,这个变成六,这个变成九呗。那九和零在比较,这个变成零,这个变成九呗。九和十在比较不需要交换位置,所以说这个地方也是什么呀,叫做一次比较。对不对啊,这都是一次比较,这是一次比较,再来一次,再来一次,再来一次,再来一次,那这一次比较它是怎么着啊,哎,不交换啊,好好思考一下,不交换,那么这个879。那这个是交换了。是不是,哎,这个位置呢,也交换了对吧,这个位置呢也交换了,这个位置呢,哎,不交换。
04:07
但你得比啊。第二次循环。对吧,比一次两次三次四次五次。啊,一次。这样说吧,第一次。第二次,第三次。第四次。啊,第五次第六次第五次第六次这是几个数据啊,12345677个数据比六次。1234566个数据比五次。有没有发现第一次?第二次。345对吧,好,那你冒出最大的数据是不是就是十啊,就是十啊,那么此时参与比较的数据又变成了什么,我们快点啊,哎,就是这堆数据当中的它。
05:12
那么接下来就是第三次循环呀,那你第三次循环的话,应该是八和七进行比较交换位置吧,是不是这个是。七然后这个是不是八呀,八和六比较交换位置,这个是不是六,然后这个是不是八呀,八和零进行比较,位比较零,这是变成八吧。八和九进行比较,不需要交换位置,九是最大的吧,哎,所以说这个应该是什么呀,叫做第一次比较。第一次比较啊,交换了吧,是吧,来拿过来拿过来,拿过拿过来啊,这个地方是不是等于交换了。这个位置是不是也交换了,这个位置是不交换啊,对吧?哎,总之第一次第二次第三次第四次比较,你一共有五个数据,我就比四次,你有六个数据,我就比五次,你有七个数据,我就比六次。
06:09
对吧,你第一次循环,哎,冒出最大的11到右边啊,那你第二次循环冒出最大的数据是不是也是到右边啊,哎,你第三次循环冒出的最大数是不是也在右边啊,哎,那么接下来此时参与比较的数据是什么呢?就变成了7608。那7608,这是第四次循环,你第四次循环这个规律还是一样的,七和六进行比较,这个变成六,这个变成七。这个变成七是吧,哎啊,七和零比较,这个变成零,这个变成七对吧,七和八比较,哎八是大的,不用交换位置对吧?所以说这应该是什么呀,叫第一次比较交换位置了,然后第二次比较怎么着啊,哎也交换位置了,第三次比较呢?哎,我们不交换位置是不是好,那么大家发现有没有,有没有,有没有一个现象,就是冒泡排序里边的这个这个交换位置啊,都是有一个,都都有点什么呀。
07:11
有点浪费是不是,哎,其实你你你这个每一次交换啊,有点有点太浪费了。太浪费了啊。嗯,选择排序。选择排序,到时候看一看啊,它比这个效率要高一些,冒泡排序效率比较低一些啊好,只是参与比较的数据就是变成什么了呢,各位是不是变成60607啊。607吧,哎,那这是第五次循环吧,是不是好,第五次循环607变成067吧,你看六是不是又跑到后边,零是不是又又跑到前面了是吧?好,然后接下来六和七是不是再比较一次对吧?但是不需要交换位置啊,所以第一次比较的时候是交换位置了,在第二次比较的时候怎么着?哎,它不需要交换位置,那不交换就不交换了,接下来参与比较的数据就变成了什么呀?哎,变成了零和六。
08:03
因为你现在七已经冒出来了,变成零和六了,那么接下来第六次循环,这个第六次循环呢,它的循环主要是什么呀?诶零和六进行比较一次嘛,对吧,比较对吧,这是第一次比较,大家看是不是就不需要交换位置,因为六是大的对吧?哎,不需要交换位置,那么这个时候大家看是不是就程序就结束了。好大家看啊,整个这个冒泡九八十七六零十一,第一次循环把最大的冒到右边,第二次循环把最大的怎么着也给它冒到右边,第三次循环最大的冒到右边,第四次循环,哎,最大的还是冒到右边,第五次循环最大的在右边,第六次循环最大的还是在右边。如果你有七条数据的话,你循环是1234。五六十啊。
09:00
注意,如果你是外边是。七条数据。第一次循环的时候需要怎么着啊,第六次。看见了吗?是60啊。如果你是五条数据的话,呃,你是六条数据,就比比五次。你是五条数据比四次。有意思。是应该for to for吧,思考一下外层这个for。你循环几次一。二。三。456吧。是不是int类型I等于零?I小于什么?各位。I小于六,是不是就循环六次?因为零到五嘛,012345嘛。
10:04
是不是?七。你循环六次啊。从零开始吧。I小于多少啊?六吧。是不是?爱家呀。哎,那么你这个数组的长度是几啊,1234567是不是七个,那这个位置是不是就是你数组长度点S减一。数组点Les长度。减一,你长度是12345677,减一是六啊。那I等于零,I小于六不就是012345。
11:01
对吧,012345不就是循环多少次啊,六次啊是不是好,那里边儿那个呢。里边这个循环几次,各位。没事,咱们慢慢分析啊,咱们先从零开始这样看一下,不行的话再改一下这个循环。啊,你里边这个怎么循环。当I等于零的第一次的时候。我这边循环几次。我里边循环几次,这是。七条数据比六次,这有个规律啊。七条数据比六次,六条据比计算。六条数据比五次。
12:01
五条数据比四次。对吧。那四条数据比三次,好好想想啊。三条数据比两次。两条数据。第一次。那你这个位置形J等于。假如说零是吧,这小于多少,然后这在这加加呀。啊。怎么做,各位?看到规律了吗?还是数组点Les减一,你找规律啊,七条数据比六次啊。
13:16
减二。不是。嗯。我们外边这个for循环,这是循环多少次?各位七条数据对吧,第一次循环,第二次循环,第三次循环,第四次循环,第五次循环,第六次循环吧,是循环六次啊这个for好,各位这个for能不能改成另外一种风格?应该是I等于多少?I大于多少?I减减就这个换成这个这两种就是为了保证六次嘛,这个不是保证六次吗。是保证六次啊,保证六次你可以从零到零零是不是,哎,I小于多少六。
14:06
对吧。那如果说你这个I要等于七呢。嗯,那I要大于零呢,I减减呢,这个和这个有没有达到同样的效果。那如果这个G变成I,这个J小于什么,是不是小于I就行了,你好好看看。I等于七的时候。然后这个是不是就是小于七。如果这小于七,是不是就是。这是几次了,各位?啊,比较的多了,各位比较的多了。来大概是这个意思,各位啊,大概是这个意思。爱。减一也行,或者说直接小于I也行,这个位置呢,直接给它写成600。
15:07
行吗?654321吗。对吧,是六六啊。就是说这个演变大家理解吗?这是六次啊。是不是,诶你看我把它删了啊,各位看好了。首先我们先不看里边这个代码,能看懂吗?I等于六。I大于零,I减减。来各位啊。我们就拿这个数据吧。这数据稍微多点。你去找规律啊,它有规律。
16:08
来这边呢,我加一个逗号。逗号,好,那么接下来我们在这比吧,负二循环I如果等于零。I小于什么?假如说I啊小于AR点什么呀?Les减一。然后I干什么呀,加加我们输出这个I的值,我们去执行一下。好,大家看现在这个值是什么,是不是012345循环几次,一次两次三次四次五次六次,对吧,你一共是12345677个数据,是不是循环六次啊,是不是已经达到了,就是我们刚才所说的吧,啊循环六次。那一循环六次,其实我们除了这种写法之外,我们还有别的写法,你明白我说的意思吗?
17:10
就这个是循环七条数据。啊,循环六次。以下的代码可以循环多少次,六次,那如果我把这个代码给它逆转过来。我让I呢,等于最大的值。N减一,我让I干什么呢?大于谁呢?零,如果我让I呢,变成减减,大家想一想,是不是同样的道理来,我们再执行。执行之后的结果,我们来看看是不是654321,好,各位,这是不是也是循环六次。你注意听啊,就是说这个也是啊,七条数据循环六次,以下代码可以循环什么呀,六次。
18:04
冒泡排序的,冒泡排序的外层循环采用这种方式啊,就是I减减的方式,各位啊,I等于Les减一之后,I大于零,I减减,你再循环一次,你看是不是六次,你可以保证六次。654321吗?那为什么要用这个,原因很简单,因为我们刚才在这分析你第一次循环的时候,里边是比较了六次啊。嗯。那我能不能让里边这个直接for循环,用外边那个I呢?我直接让里边这个for循环,我用外边这个I,因为你I最初是等于六嘛,是不是下一次再循环I就能变成五了嘛,好,你看正好这凑上第一次的是六次,第二次就是五次,第三次就是。四次吧,哎,你看是不是第四次是三次,第五次是两次,第六次是一次,哎,有意思,那如果是这样的话,那我是不是应该是I正好是从654321的变化吗?所以这边我们能够特类成J等,让它从零开始,J让它小于什么呢?哎,然后这干什么呀?哎,加加两个变量,你从零开始,然后这呢小于这个I。
19:25
你这个I最初的不是六吗?当你I等于六的时候,这个是六啊,这个是六的话,我们你整个这个你就别看了。啊,这个你就别看了,你里边这个循环是不是就循环六次啊。012345嘛,哎,正好啊,你看。那第一次循环的里边循环六次啊。是不是好,那么再来各位,你的这个循环,我们这是写的I对吧,这个for循环结束之后,是不是I减减了,I减减之后让I变成了几,变成了五对吧?那么这个时候我们里边负循环在执行的时候,这个I是不是就是五啊,那如果是五的话,那是不是正好就是循环五次啊。
20:12
对吧,12345,你看五次吧。对不对,所以这个位置正好写上I的值就行了,如果你采用第一种方案这种循环的话。就不太好了,I从零开始,I小于它的Les减一,I加加这种方式不如写成这种逆过来的就I减减的这种方式,因为正好I减减,I从最大值开始的话,我就可以正好把这个I值怎么放到这个位置上来控制里边这个循环的什么。里边这个循环的次数啊,里边这个循环的次数,各位啊,主要是这样的,那你里边这个是谁跟谁进行比较啊各位。啊。里边这个循环的时候,你假如说这是六吧。你循环这这是从012345是不是结束啊,下边零的和谁呀。
21:06
和这个一进行比较啊。对吧,下标为。一的在和谁呀?二进行比较吧。哎,比较完之后呢,再拿着这个和这个比较吧。然后再拿着这个和这个比较吧,再拿着这个是不是和这个比较啊,哎,每一次我们是不是都是从这从零开始比的。好好想想,这个位置我们写上什么呀?I个位看好了。不太好写啊,这个东西。这样写是六次,这样I减减的方式也是六次。啊,然后呢,在六次循环的时候,这个I的值放到这个位置上,可以来控制里面这个循环的次数。好,那么判断一下各位啊,如果什么。如果arr这个数组,它的下标为G吧。
22:04
是不是,然后呢,他和谁进行比较,各位arg什么加一是吗?是这样比较吗?如果arj。怎么着?大于arj加一,这的最大值是几个呗,看看会不会越界。看看会不会越界?呃,I的最大值是六,所以这个是六。然后呢,J等于零,J小于六的话,G的最大值就是五吧,如果是五的话,五加上一是几啊六吧?所以是不是正好不会越界?对吧,是不是正好不会越界呀。哎,你要不要考虑越界的问题啊。这不G吗?0J小于什么呀?I嘛,G加加嘛,那这个里边不是应该拿着G下边的元素和G加一的元素进行比较吗?
23:08
你注意看啊,外边这个别看了啊,就看里边那个。来各位啊,把我们数据拿过来。这个数据啊,拿过来,我们就把这个数据拿过来,这得整明白,各位啊,虽然这个东西不是很重要,但是咱们得弄明白它。等于0A。是不是九。如果说大于。A加一。这等于零零加一是一对吧,所以是不是九和八,如果它和它相比,它大于它,是不是要交换位置。对吧,好,那我问你接下来是不是会这加加,原先这是零对吗?这加加会变成几。会变成一对吧,好,那么这里边儿是不是就是一,然后紧接着这是不是就是二。
24:04
这个是不是和这个进行比较。对吧,好比较完之后,接下来大家想一想,我们这个G加加。是不是又增加一个呀。对吧,增加一个变成二了呀,圆先是一呀,变成二之后,那么这个是不是就是AR2啊,然后这个是不是就三啊。就你最初这个实际上零零和你的一进行比较,比较完之后呢,就就交换不交换位置对吧?哎,那接下来我们这块如果说是A中括号零这块和一比较之后呢,这边就就就得变成一啊,这边就得变成二啊。然后接下来我们这边呢,就得变成二,这个变成三呀,对吧,这个呢就得变成什么呀,三呀,这个变成四呀,对不对,那这个呢变成什么呀,变成四,那这个就得变成五啊是不是,哎这个呢,变成五的话,那这个是不是就变成六啊。对吧,哎。那当J等于五的时候。
25:01
在这加加变成六。大家想一想,这不I已经等于是五,这个这已经等于是五了吗?你是五的话,你再往下进行,你这个结束之后,再往下进行G加加,是不是这就变成六了。对吧,那I的最大值是是。那这小于六是不是循环就结束了?那A6这个是不是正好是七个元素,12345677个元素,最后这个元素的下标是不是正好是六啊,所以这个位置是不是就是拿着这下标和G加一的下标进行进行比对。如果说你前面大大于右边,你在这个位置上需要进行交换位置。啊,交换位置。这要交换位置的各位啊。谁和谁交换位置?Arj和谁呢?Arj加一交换,那你怎么交换呢?其实这个交换位置还是比较经典的一个算法,各位啊,呃,大家了解一下什么意思呢?什么意思就是你这个盒子里边啊,放的是多少啊,放的是100,然后你这个盒子里边呢,放的是多少呢?哎,放的是。
26:24
90大家都知道这个之间啊,它们是一个大于的关系。对吧。就是100是大于90的。大于90,我们左边大右边小,那交换位置怎么交换啊,你可以在这临时整个变量出来。就是你可以整个临时的盒子啊,然后把100给他拿到这个盒子里边。你你你明白吗?就是100先攒存起来,100先放到这个盒子里边啊。然后接下来你的这个90是不是可以放到这个盒子里边了。
27:06
你想想。这个90是不是可以放到这个盒子里边了。对吧?哎,那么接下来我们是不是再把我们的这个100放到这个里边啊。你你你你交换怎么交换啊,不就这么交换吗。你。左手一个苹果。右手。拿着什么呀,手机。啊,一个苹果一个手机,你想交换位置,你怎么交换。这是个人啊。抽象派的啊。抽象派的。这是个人啊。对。来。这是手机啊,手机左边是苹果,诶,你要交换位置,怎么交换啊。啊。
28:01
直接交换啊,不是啊,你得整一个盒子出来。啊。整一个盒子,先把手机放这儿。把把这个手空出来,明白吗?右手得空出来,然后过来。过来之后这个手上就是苹果了呀,你这个手再去这个盒子里面拿手机。嗯。你用嘴咬着那个嘴也代表这个盒子一个道理,你那个嘴其实也是一个盒子一样。啊,灵魂画手啊,抽象派的啊,价值1000万。啊好,那么我们这块呢,就按照我们的这个思路来,各位啊,怎么交换,其实这个东西呢,交换咱来吧,再再来一次啊,这是一个盒子,这是一个盒子,这个盒子里边放的是100对吧,这个盒子里边放的是多少90,那90啊,那么这边呢,是一个什么关系呢?是一个大于关系啊要交换位置,怎么交换,那么我们可以在这临时给个盒子来,这是个临时盒子啊。
29:08
临时的盒子,那么临时的盒子其实就是个变量,所以在这边呢,你可以准备一个temp,看见了吧,哎,可以临时给个变量,这就是那个盒子呀,哎,这就是那盒子嘛。和的啊,叫temp啊叫temp,这个起个名叫temp,临时的啊,临时的临时的啊,然后接下来把这个100先放进去好,这个100在哪。这个100在哪。你不是这个和这个要交换位置吗。这里面是不是存的100。把这个100通过等号的方式给了谁?Temp。这不左边那个数据吗。是先放到盒子里边好完成什么了,各位是不是相当于这步完成了,来来个红色的啊,来个红色的,来这这步是不是就完成了,这里面是不是存了100现在。
30:02
这个ta里边是不是存了个100,哎,代码能看懂吧,是不是把它给了ta呀?好,那么接下来我问大家是不是这个得往这个里边放了。这个是不是给了他行,那我问大家。再来这个代码啊,应该是什么?应该是arg等于arg加一对吧。这个arg加一是不是就右边这个数据是不是通过等号的方式付给左边。那这样的话,是不是就相当于这一步完成了。对吧,好,那接下来把这个是不是放到这儿啊,好,这是谁呀?Temp啊,Temp往这儿放啊,好,那么接下来这个程序应该是什么呀?应该是AJ加一,然后接下来temp。你看他通过等号的方式付给他吗?这样的话就完成交换了,各位。啊,就完成交换了。来这边。冒泡排序就写完了。
31:02
如果你这个之间不是这个大于的关系,那么我们这个if语句条件不成立,里边就不用交换位置,就接着往下继续比就行了,这加加。啊,然后当我们排完序之后啊,输出结果,我们可以对上面这个数组进行遍历。对吧?来for循环I等于零,I小于这个数组,点Les I加加,对吧?我们输出AR数组下标为I的元素。AR下边为I的元素,就是上面这个就是冒泡排序排完这是那个数组嘛,然后下边这个放循环嵌套放循环,对上面这个数据进行排序,排完序之后呢,我们输出这个结果啊看一下。零六七八九十十一。嗯。一共比较了多少次呢?我们来统计一下他比较了多少次啊。
32:02
应该是比较了多少次,各位。六。第一次循环六啊。六加五。六加五。15加四啊,11加45。18加三次啊,18加两次。20次再加一次,21次吧。也就是说。所有的这个比较的这个是21回。啊,21回啊,那么这个21回我们能统计出来吗。这个里边这个for是不是只要循环一次,不管它交换不交换位置是不是,总之要比比比是吧,啊就是不管。不管是,不管是否需要交换位置,总之是要比较一次的。
33:03
所以我们可以在外边儿给一个count,默认值是零,只要比较一次,我们就让count干啥,加加。然后在这所有的循环结束之后,我们可以看一看它的比较次数count。走哎呀第bug了,第bug无所谓啊,这么着吧。21次,大家看这是不是21次啊,跟我们刚才推算的是不是一样啊。对吧,六嘛。这是五四加三加二再加一,一共21次比较。一共是比较了21次啊,点右键我们执行。在执行啊,你看比较次数21次零六七八九十一十十一。嗯。
34:01
比较次数21次啊,那这样的话其实就是冒泡了,这个无所谓了啊,这个注释掉跟这个没什么关系啊,这个冒泡排序的这个算法这样写肯定是没问题的。外边是控制六次,但你的写法是ar.n减一大于零的这个I减减的方式,不要采用这种方式啊,采用这种方式不好写。采用这种不好写,I等于零,I小于它加加。你这个能控制住六次,我这样写也可以控制住六次,只不过我是从大到小递减的,而你这个是从小到大递增的,A加加对吧?我为什么外边for循环这样写,是因为我正好这个I的值我要在这用。因为我里发现我外边这个循环一次的时候,循环第一次的时候,我这个里边的循环就得六次,我再循环外边第二次的时候,里边这个循环我就循环五次,对吧,所以这个值正好是个递减的效果嘛。对吧,哎,递减的效果啊,你把从这个52行。52行这个代码啊,然后呢,到哪儿呢,到这个。
35:03
哎,六十五行的这个代码啊,从这拍个照片吧,拍个照片。留下来。留下来啊,就采用这种方式,这个冒泡排序是肯定没有任何问题的啊,没有这个问题的。
我来说两句