变量交换
方法1:中间变量
【原理】利用中间变量保存其中一个变量的值,使得这个变量被修改后,原来的值不会丢失。
height = [20, 10, 30]
#交换两个元素
a = height[0]
height[0] = height[1]
height[1] = a
方法2:单行赋值
【原理】python支持在一行中给多个变量赋值,在等号两边交换变量的顺序,可以交换变量的值。
data = [20, 10, 30]
data[0], data[1] = data[1], data[0]
交换列表data的前两个元素
排序概述
生活中,我们离不开排序。比如,我们会按照时间顺序排列课程表; 体育课上,同学们会按照身高排队等等。
在编程的世界中,应用到排序的场景也比比皆是。音乐播放器会按照歌曲的播放次数形成榜单,游戏中,要按照得分的 多少给玩家排名……
可以说,排序无处不在。它看似简单,背后却隐藏着多种 多样的算法和思想。
排序算法:冒泡排序,选择排序,插入排序,快速排序。。。。。。
冒泡排序
冒泡排序(bubble sort)是一种基础的排序算法。
冒泡排序思想
从第一位开始,依次比较相邻两个数字的大小,并根据 比较结果,交换两个数字的位置。在这个过程中,每个数字都会像小气泡一样,根据自身 大小,一点一点向序列的一侧移动,所以叫冒泡排序。
样例:使用冒泡排序的方法,让[4,3,5,2,1]按从小到大的 顺序排列,过程是这样的:
第一轮冒泡
4 3 5 2 1 //4 > 3 交换
3 4 5 2 1 //4 < 5 不交换
3 4 5 2 1 //5 > 2 交换
3 4 2 5 1 //5 > 1 交换
3 4 2 1 5
一轮冒泡结束,最大的元素移到了最右侧
第二轮冒泡
最大的数字已经排列到了最右侧,使用相同的方法继续对剩余元素排序:
3 4 2 1 5 //3 < 4 不交换
3 4 2 1 5 //4 > 2 交换
3 2 4 1 5 //4 > 1 交换
3 2 1 4 5
第二轮冒泡结束,排好了第二大的元素
第三轮冒泡
3 2 1 4 5 //3 > 2 交换
2 3 1 4 5 //3 > 1 交换
2 1 3 4 5
第三轮冒泡结束,排好了三个元素
第四轮冒泡
2 1 3 4 5 //2 > 1 交换
1 2 3 4 5
第四轮冒泡结束,排好了四个元素,剩下的最后一个元素也随之确定下来,排序结束。
总结
每一轮冒泡排序可以排好一个元素,要排列好所有元素, 需要经过元素个数-1轮冒泡。
冒泡轮数 = 元素个数 – 1
冒泡排序代码
for i in range(元素个数-1): //控制进行第几轮冒泡排序
for j in range(元素个数-1-i) //比较次数 实现每一轮冒泡处理
if 列表[j] > 列表[j+1]
列表[j], 列表[j+1] = 列表[j+1], 列表[j]
使用循环嵌套实现冒泡排序。
外循环:控制进行第几轮冒泡排序,循环次数表示冒泡轮数 内循环:实现每一轮冒泡处理,循环次数表示每一轮的比较次数
sort()
Python中,可以使用sort()对列表进行排序。
使用格式
列表.sort()
直接改变列表,默认从小到大排序
a = [5, 2, 3, 1, 4]
a.sort() //a = [1, 2, 3, 4, 5]
参数reverse
设置参数reverse可以实现从大到小排序。
reverse=False //从小到大排序(默认)
reverse=True //从大到小排序
a = [5, 2, 3, 1, 4]
a.sort(reverse=True) //a = [5, 4, 3, 2, 1]