小学课后服务 Python少儿编程 基础篇:4-神奇的排序 课件 (24张PPT)

资源下载
  1. 二一教育资源

小学课后服务 Python少儿编程 基础篇:4-神奇的排序 课件 (24张PPT)

资源简介

(共24张PPT)
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.
少儿编程课
神奇的排序
增强运算符
/=
-=
*=
+=
a=1
a/=1
print(a)
a=1
a-=1
print(a)
a=1
a*=1
print(a)
a=1
a+=1
print(a)
双重循环语句
for 变量1 in 可迭代内容:
循环体1…
for 变量2 in 可迭代内容:
循环体2…
for x in range(1,10):
line=''
for y in range(1,x+1):
line += str(y)+'*'+str(x)+'='+str(x*y)+' '
print(line)
排序问题
按大小顺序排列数字
利用循环生成一个有5个数字的列表。
2. 将数字按照从小到大的顺序排列
例如:
列表中的数字为: [ 83, 20, 51, 82, 55 ],
排序后的数字为: [ 20, 51, 55, 82, 83 ]
按大小顺序排列数字
排序需要进行多轮,在每一轮排序中都会挑选出候选数字中最大的一个,放到本轮排序所有数字的最后。
第一轮排序
待排序的数字为全部5个数字,比较时采用两两比较法。两个数字中,如果左边数字大于右边数字,则两个数字互换;如果左边数字不大于右边数字,则不互换位置。
第一轮第一次比较[20, 83, 51, 82, 55 ],因为左侧的83大于20,所以两者交换,此时数字顺序为:
[20, 83, 51, 82, 55 ]
第一轮第二次比较[20, 83, 51, 82, 55 ],因为左侧的83大于51,所以两者交换,此时数字顺序为:
[20, 51, 83, 82, 55 ]
第一轮第三次比较[20, 51, 83, 82, 55 ],因为左侧的83大于82,所以两者交换,此时数字顺序为:
[20, 51, 82, 83, 55 ]
第一轮第四次比较[20, 51, 82, 83, 55 ],因为左侧的83大于55,所以两者交换,此时数字顺序为:
[20, 51, 82, 55, 83 ]
第二轮排序
经过了第一轮排序后,我们已经把5个数字中最大的数字放到了最后,第二轮待排序的数字为剩下的4个数字。比较时继续采用两两比较法。
第二轮第一次比较[20, 51, 82, 55, 83 ],因为左侧的20不大于51,所以两者不交换
第二轮第二次比较[20, 51, 82, 55, 83 ],因为左侧的51不大于82,所以两者不交换
第二轮第三次比较[20, 51, 82, 55, 83 ],因为左侧的82大于55,所以两者交换,此时数字顺序为:
[20, 51, 55, 82, 83 ]
第三轮排序
经过了第二轮排序后,我们已经把5个数字中最大的2个数字放到了最后,第三轮待排序的数字为剩下的3个数字。比较时继续采用两两比较法。
第三轮第一次比较[20, 51, 55, 82, 83 ],因为左侧的20不大于51,所以两者不交换
第三轮第二次比较[20, 51, 55, 82, 83 ],因为左侧的51不大于55,所以两者不交换
第四轮排序
经过了第三轮排序后,我们已经把5个数字中最大的3个数字放到了最后,第四轮待排序的数字为剩下的2个数字。比较时继续采用两两比较法。
第四轮第一次比较[20, 51, 55, 82, 83 ],因为左侧的20大于51,所以两者不交换
最终,5个数字四轮比较就可以得到最终的结果[ 20, 51, 55, 82, 83 ],每一轮两两比较的次数各不相同,每一轮比较次数都在减少。
代码实现
from random import randint
m=[]
for x in range(5): #生成有5个随机数的列表
n=randint(1,100)
m.append(n)
print(m) #打印生成的列表
for x in range(4): #需要4轮交换
for y in range(4-x): #每轮交换的次数都在减少
if m[y]>m[y+1]: #如果左侧大于右侧数字,两者交换
m[y],m[y+1]=m[y+1],m[y]
print(m)
按从大到小排序数字
利用循环生成一个有10个数字的列表。
按数字从大到小的顺序排列。
例如:
列表中数字:[ 70, 35, 85, 16, 9, 21, 37, 33, 60, 39 ]
排序后数字:[ 85, 70, 60, 39, 37, 35, 33, 21, 16, 9 ]
代码实现
from random import randint
m=[]
for x in range(10): #生成有10个随机数的列表
n=randint(1,100)
m.append(n)
print(m)
for x in range(9): #需要9轮交换
for y in range(9-x): #每轮交换的次数都在减少
if m[y]m[y],m[y+1]=m[y+1],m[y]
print(m)
排序
排序是计算机内经常进行的一种操作,其目的是将一组“无序”的记录序列
调整为“有序”的记录序列。
我们刚才介绍的排序方法称为“冒泡排序”法。
计算机科学家们形成了多种排序的方法,除了“冒泡排序”法之外还有:
“选择排序”,“插入排序”,“归并排序”,“快速排序”等排序方法。
选择排序
用选择排序排列数字
利用循环生成一个有5个数字的列表。
2. 将数字按照从小到大的顺序排列
例如:
列表中的数字为: [ 83, 20, 51, 82, 55 ]
排序后的数字为: [ 20, 51, 55, 82, 83 ]
利用双重循环进行选择排序
外层循环决定排序的轮次,内层循环进行每一轮次的排序
3. 选择排序的关键点在于每一轮排序后,都会挑选出本轮排序中最符合要求的内容放入指定的位置
选择排序的要点:
第一轮排序
待排序的数字为全部5个数字,比较时采用两两比较法。比较双方的左侧数字总是第一个数字。如果左边数字大于右边数字,则两个数字互换;如果左边数字不大于右边数字,则不互换位置。
第一轮第一次比较[83, 20, 51, 82, 55 ],因为左侧的83大于20,所以两者交换,此时数字顺序为:
[20, 83, 51, 82, 55 ]
第一轮第二次比较[20, 83, 51, 82, 55 ],因为左侧的20不大于51,所以两者不交换
第一轮第三次比较[20, 83, 51, 82, 55 ],因为左侧的20不大于82,所以两者不交换
第一轮第四次比较[20, 83, 51, 82, 55 ],因为左侧的20大于55,所以两者不交换
第二轮排序
经过了第一轮排序后,我们已经把5个数字中最小的数字放到了第一个,第二轮待排序的数字为剩下的4个数字。比较时继续采用两两比较法。比较双方的左侧数字总是第二个数字。如果左边数字大于右边数字,则两个数字互换;如果左边数字不大于右边数字,则不互换位置。
第二轮第一次比较[20, 83, 51, 82, 55 ],因为左侧的83大于51,所以两者交换,此时数字顺序为:
[20, 51, 83, 82, 55 ]
第二轮第二次比较[20, 51, 83, 82, 55 ],因为左侧的51不大于82,所以两者不交换
第二轮第三次比较[20, 51, 83, 82, 55 ],因为左侧的51不大于55,所以不两者交换
第三轮排序
经过了第二轮排序后,我们已经把5个数字中最小的两个数字放到了前二个,第三轮待排序的数字为剩下的3个数字。比较时继续采用两两比较法。比较双方的左侧数字总是第三个数字。如果左边数字大于右边数字,则两个数字互换;如果左边数字不大于右边数字,则不互换位置。
第三轮第一次比较[20, 51, 83, 82, 55 ],因为左侧的83大于82,所以两者交换,此时数字顺序为:[20, 51, 82, 83, 55 ]
第三轮第二次比较[20, 51, 82, 83, 55 ],因为左侧的82大于55,所以两者交换,此时数字顺序为:[20, 51, 55, 83, 82 ]
第四轮排序
经过了三轮排序后,我们已经把5个数字中最小的三个数字放到了前三个,第四轮待排序的数字为剩下的2个数字。比较时继续采用两两比较法。比较双方的左侧数字总是第四个数字。如果左边数字大于右边数字,则两个数字互换;如果左边数字不大于右边数字,则不互换位置。
第四轮第一次比较[20, 51, 55, 83, 82 ],因为左侧的83大于82,所以两者交换,此时数字顺序为:[20, 51, 55, 82, 83 ]
第四轮排序
经过了三轮排序后,我们已经把5个数字中最小的三个数字放到了前三个,第四轮待排序的数字为剩下的2个数字。比较时继续采用两两比较法。比较双方的左侧数字总是第四个数字。如果左边数字大于右边数字,则两个数字互换;如果左边数字不大于右边数字,则不互换位置。
第四轮第一次比较[20, 51, 55, 83, 82 ],因为左侧的83大于82,所以两者交换,此时数字顺序为:[20, 51, 55, 82, 83 ]
最终,5个数字四轮比较就可以得到最终的结果[ 20, 51, 55, 82, 83 ],每一轮两两比较的次数各不相同,每一轮比较次数都在减少。
代码实现
from random import randint
m=[]
for x in range(5): #生成有5个随机数的列表
n=randint(1,100)
m.append(n)
print(m) #打印生成的列表
for x in range(4): #需要4轮交换
for y in range(x+1,5): #每轮交换的次数都在减少
if m[x]>m[y]: #如果左侧大于右侧数字, 两者交换
m[x],m[y]=m[y],m[x]
print(m)

展开更多......

收起↑

资源预览