一. 冒泡排序
这里介绍了另一种排序的方法,冒泡排序法。选择排序法比较接近人们正常的思维,一个数据和剩下的说有数据比较。
冒泡排序法是临近的数据间进行比较,大的数据就调到右侧,角标1-2的数据对比,角标2-3的数据对比......
无论是选择排序还是冒泡排序都是先求最值。
冒泡排序法,是一轮一轮地进行左右两侧的数据进行对比。第一轮将所有数据中最大的数据移动到了最右侧,这种操作的核心在于:一直保证大的数据在右侧,那么经过不断地对调,最大的数据肯定在最后一位中。第一轮将最大的数据移动到了最右边,接下来相同的操作移动次大值到次右位.....
这样从左到右,得到的是从小到大的数据排列。也可以从右边开始,两两比较,大的值放左侧,一直往左边进行比较,从而保证最左侧为最大值,最终得到的从大到小的数据排列。
如果抛开技术层面不谈的话,一定要保证最值要位于两两比较的前进方向的位置上。
这里依旧采用的是大圈套小圈,怎么分析。
自己的初步分析:所有的操作都是建立在数组中数据的基础上的,无论是操作的次数还是操作的数据,这一点是要明确的。本题中,数据的个数是6个。先不管遍历时进行了什么操作,总共进行了5次遍历,分别是:0-5遍历,0-4遍历,0-3遍历,0-2遍历,0-1遍历。6个数,进行了5次遍历,定义一个变量来控制遍历的次数。每次遍历的内部,也进行了操作。比如说0-5遍历时,是0-1对比,1-2对比,2-3对比,3-4对比,4-5对比,总共进行了5次对比操作。第2次遍历,进行了4次对比;第3次遍历,进行了3次对比;也就是说每次遍历里面的对比次数也在变化,也需要定义一个变量来控制对比的次数,至于怎么对比,怎么操作先不管。→确定的数组,就决定了确定次数的遍历,也会确定遍历里面对比的次数。这个有点反斜三角的意思,一个变量控制行数,一个变量控制列数,由于列数在变化,导致列变量的循环次数还要借助行变量来控制。
经过视频讲解后,也能写出源代码。感觉这是脱胎于for语句嵌套,形成反斜三角的题目。
视频接着讲解了从右边往左边进行的冒泡排序法,我们自己也尝试一下,(本质上还是反斜三角的另一种写法)
视频的解法,虽然结果是正确的,但是做法仍旧是从角标0开始,将较大的值往右移动。我以为的从右侧开始冒泡,是将较小的值往左移,毕竟从右边开始移动。