关于列表数据的排序有很多,主要有冒泡排序、选择排序、插入排序、快速排序、堆排序及归并排序等等。对于平时的使用,数据量比较小的情况下,使用哪一种排序差别都不看,就看其稳定性选择其中的一种就可以了。
排序要用到的必不可少的就是循环,这是一个比较让人不太好理解的抽象东西。关于单层循环的理解比较好容易一点,可以看成是变量对要处理的列表数据的标记,然后按照另外制定的条件进行选择性输出,这个比较简单。
在平时的使用中,嵌套循环使用的机会还是比较多的,对于嵌套循环的理解似乎更难一些,主要的重点是抓住其外层循环与内层循环的变量范围,把握好变量的取值与循环过程中所遍历的标记对象,知道变量所指向的对象,这样在写条件判断的时候最后输出的时候才会指向正确。
通过一张图片这样对照看起来似乎更容易理解一些,在没有其他条件下,对于外层循环每一个变量标记一次,内层循环对所有的元素进行一次标记。理解这些之后,对于加上需要的条件,那判断起来也是一样的,只是把符合要求的拿出来,不符合要求的自动过滤掉。
理解了这些之后,对于几种排序来说相对就会好理解一些,只要在写函数或代码的时候抓住其中的变量,制定好相对的条件就可以了。
冒泡升排序
冒泡升排序就是将一组杂乱的列表数据进行从小到大进行升序排列,之所以叫冒泡排序,是因为气泡在水中上升都是越来越大,所我们的升排序相类似,这样的叫法让人更容易理解一些吧。
冒泡排序的思路主要是把一组数据相邻的二个元素进行比较,如果后面的数比前面的大,那就不做改动继续与后面相邻数进行比较,如果后面的数比前面的数小,那就交换位置,如此循环。这样循环一次结束后,肯定会找到一个最大的数放在最后,经过N-1循环后,那么列表所有的数据就会按升序的位置排列好。
还是通过代码来实现看一下:
如果对上面的循环理解了,对下面的代码理解起来就没什么问题了。就是写一下循环语句,然后对循环过程的变量进行判断大小,然后进行位置交换,外层的每一次循环,内层循环通过比较都会找出一个最大的数放在列表的后面,当外层循环完了,排列排序也就完成了。
通过实例来分步看一下第一次循环的结果:
这是对一个无序列表和一个随机列表的排列结果,然后来看看每一次的循环,列表的变化,这样对于理解循环和函数执行过程中发生了什么就更直观了。
这样我们可以看到,当外层循环一次,内层循环经过一次比较后,都会找出一个最大的数放在最后,只列出一向项,对于参考和理解,我相信有这些就足够了。开始主要是理解好循环及嵌套循环过程,变量的取值及在循环过程中他们都做了什么,这样对于排序的理解就容易的多了。
好了,今天对于冒泡排序就分享到这里,下次再分享其他几种排序方法,然后再做总结,看看各种排序之间的异同,找出异同,这样不管是对记忆和理解,还是以后的使用都会有很大帮助的。
联系客服