00:00
首先呢,我们来验证一下刚才这个流程是否正确啊,现在我们来玩一把,先我们我先分布分布完成。其实这些代码已经几乎几乎就已经写完了,分布完成,来验一把,首先呢,我来给大家验一下第一次,Are just。OK,各位同学,Just,把数组传给我,我第一个左左那个非页子节点是一认识呢,认识好认识,我们给他穿一个多大呢?大家想想。认识是不是你第一个传进来,这个认识应该是R。点认识呀。是不是就是这个数组的大小?是不是好,那么我们来玩一把,我们看看第一次调整过后是不是跟我们想的一样。各位同学好,我说第一次好,我们把它打出来,那怎么打呢?二这样写啊二。因为我们要验证一下这代码到底跟我们想的是不是一样的,二点,To string,然后我把这个放进去。
01:05
好,如果不出问题,如果不出问题,我们这个速度打出来应该长这样子的,长哪个样子的呢。就讲他第一次调整的这个498。诶,不是一个啊。对对,是这个498。五六好,看看是不是49856就应该49856好运行一下,那上面我调一下啊,调一下在同学们不着急啊,Help so,我把放进去,放进去过后呢,我们运行一把,你们可以看到诶,它的确是49856正确吧,好紧接着我们来继续,因为你刚才只是调整到了人家的。呃,还没有,最后还没调整,最终还没有调整一个大顶,对,是不是你还要继续调整上一个节点,因为你现在有两个节点要调,上面这个事情还没调呢,是不是调成非液体的四好,我们再来写一下四。
02:00
那现在呢?我们再来玩一把,Just。这个一定是在原先这个基础上调整,对不对?好给他一个几呢,给他一个零呢。是不是它的大小是不是仍然是因为第一次调整并没有找到一个真正最大的数,你现在还在调整呢,最大那个数你还没有找到,是不是它调整的数仍然是数组的这个嫩,这么这么这么多个数啊,好,我们再来调试第二次。第二次就是一个真正的大顶堆了,那现在呢,我们再输出这个输出来过后就应该是我们的图解的哪一个图呢。就应该是这个图96854,是不是96854呢,各位朋友比一下九。6854各位运行一下同学们请看代码,96854搞定好同学们这个代码就行,大大致大家知道下面老师要怎么写了,显然我不可能每次都这样写,同学们好,我们完成第一件事情来了,现在一次完成代码啊,完成我们的最终代码。
03:07
最终代码,因为刚才老师花了那么多时间,其实就是要讲解我们整个这个操作分成的这个步骤,好第一步。这是我们做的第一件事情,来吧,同学们,搞定它。这是第一次,先把它做成一个大顶推,那我就不啰嗦了,直接负循环n ti等于R点,那是我一共有几个啊非点第一次是不是除以二再减一个1I要干什么呢?I只要大于等于零,我就可以去做I减减。I键键,I键键完了过后,我们直接在这里调,调用我们的adjust help。把这个传进去,I是几呢?I就是。这个I你第一次是一,第二次是零,那是几呢?R点认识,那么写完。第一个工作完成了,好,第一个工作完成以后,我们可以把这个数组,呃,打出来一下,还是输出来,看看是不是跟我们想的一样,现在应该变成96854运行。
04:07
好,这个地方我就不写第几次了啊,速度。等于运行,现在应该是96854完全正确,好紧接着做我们的第二第二套方案,第二个呢,大家看这是一个循环。明白吧,我就不啰嗦啊,同学们,现在因为代码已经写到这个份上了,我就一次搞定。呃,那么怎么来玩这个东西呢?各位同学,是不是一个for循环就可以搞定for循环int j等于r.N减去一个一。你要调整多少个数,你一共有五个数,你一共一共一共有五个数,但是实际上你要调四个数就够了,所以要减去一个一明白我意思吧,因为五个数你你调四个数,最后一个数一定是它的位置,只要截大于零,然后解干什么呢?解减减。好,在节前节的基础上,我们干什么呢?
05:01
你上面交换没有,各位同学,是不是我们找到这个大顶推过后,九和四还要交换,交换一下是不是还有个交换动作,不要忘了交换啊交换,我们刚才只是把它调成大顶堆,那么我们以后每做一次是不是要交换?这个交换了没有,没有交换交换交换代码非常的简单,我把这边定一个临时变量temp。好吧,我定一个,诶这个地方不好,Temp等于零,开始交换,交换是谁和谁交换,各位朋友是不是你当前这个结。先保存起来。然后让这个结。二零这个能理解吗?因为你处理完了过后各位同学。你你处理完了过后,其实是把最后最你这个节每次在不断的减小,就是把顶,因为你二零应该是最大的值了吗。是不是二就是最大的值,因为你你呃你你大顶椎做完了之后,你肯定是把调到最上面去了嘛,所以它就是这个是最大值,嗯,放最大值和这个解交换,交换的时候用了个中间变量,好这个做完了以后再做一个工作,还有干什么,二零就应该等于temp就完事了。
06:17
好,这个地方要反复的进行调整。是不是要反复调整,因为你交换完了过后,下次是不是又来调整第二个数了,同时这边再调调的时候,这一面填几呢?应该填入什么东西啊。工作,想想应该调什么?是不是我们在调整的时候还是调你这个。诶,我们刚才想想啊,这个是I又是调整。以零,因为你是以零。以零为这个节点开始往下走的嘛,因因为你这边是个循环,所以这个大小呢,咱们应该填成节了,每次都是少。这边要填零啊,同学们为什么要填零呢?因为你其实真实的调整总是从顶上,我当时举例是找的最后一个,是因为好讲,如果我从顶上找,我就跑几遍嘛,所以说真实的调整呢,总是从呃,这个顶顶顶上来调整的,好同学们,这个代码我们就写完了,到此为止,写完写完过后呢,同学们我们来。
07:19
看一下最后这个结果对不对,好不好,最后这个结果对不对,那么最后这个结果现在应该输出的就是一个有序的输出了运行。看一下4645689没有问题吧。45689,好,为了验证它的正确性呢,我们多加几个数。负一。90。89。是56好负。999好,我们再运行一下,看看它是否正确。运行至。好,我们看一下这个结果呢,跟我们想的啊,完全是一样的,没有任何问题,代码是OK的啊OK的好把这个撤回去。好的同学们,那关于我们这一个堆排序的核心代码呢,我就给大家讲到这,讲的比较细啊,讲的比较细,比较慢,可能有些有同学同学有基础呢,会觉得稍微有点啰嗦,但是呢,我告诉大家堆排序确实稍微有点麻烦,所以说我讲的比较细致,呃,那么我的要求很简单,待会呢,大家把这个把这个堆排序自己写一遍,能够把它灵活的消化啊,真正的把它消化,并且在面试或者笔试的时候呢,能够把代码写出来。
08:31
好,那么这个堆排序这一块的核心代码就给大家说到这,待会呢,我们再测试一下,测试一下它的性能。
我来说两句