第08讲 排序算法
教练:老马的程序人生
微信:ProgrammingAssistant
博客:https://lsgogroup.blog.csdn.net/
讲课目录
- 常考的排序算法
- 项目制作:“三个数排序”
- 项目制作:“成绩查询”
- 项目制作:“排序”
- 项目制作:“森林运动会”
排序算法
- 计算机学会(GESP)中属于四级的内容
- 电子学会(CIE)中属于四级的内容
排序算法
- 交换排序(冒泡排序)
- 插入排序
- 选择排序
排序算法:交换排序
思路:通过相邻记录之间的比较和交换
- 使关键字较小的记录如气泡一般逐渐向上漂移直至水面。
- 使关键字较大的记录如重物一般逐渐向下沉降直至水底。
例如:对以下这组数字由小到大排序。
45 , 78 , 12 , 34 , 32 45,78,12,34,32 45,78,12,34,32
真题练习
01:随机生成5个数字存储到列表中,下面哪个选项可以实现列表中的数字从小到大排列?( )
- A.
- B.
- C.
- D.
- 参考答案:A
- 试题解析:C,D通过中间变量交换数据错误,由于是由小到大排序,第一趟需要把最大的数据放到最后面。选择A。
真题练习
02:使用冒泡排序法对 5, 2, 6, 3, 8 进行升序排列,则第一趟排序的结果为?( )
- A. 2, 5, 3, 6, 8
- B. 2, 5, 6, 3, 8
- C. 2, 3, 6, 5, 8
- D. 2, 3, 5, 6, 8
- 参考答案:A
- 试题解析:冒泡排,5 > 2交换,5 < 6 不交换,6 > 3 交换,6 < 8不交换。第一趟排序之后的序列2、5、3、6、8选择A。
真题练习
03:使用冒泡排序算法对数据:32、40、21、46、69,进行从小到大排序,第一轮排序的结果是?( )
- A. 32、40、21、46、69
- B. 40、32、21、46、69
- C. 21、32、40、46、69
- D. 32、21、40、46、69
- 参考答案:D
- 试题解析:冒泡排,32 < 40不交换,40 > 21 交换,40 < 46 不交换,46 < 69 不交换。第一趟排序之后的序列32、21、40、46、69,选择D。
排序算法:插入排序
思路:将一个记录插入到已经排好序的有序表中,从而得到一个新的记录增1的有序表。即:先将序列的第1个记录看成是一个有序的子序列,然后从第2个记录逐个进行插入,直至整个序列有序为止。
例如:对以下这组数字由小到大排序。
45 , 78 , 12 , 34 , 32 45,78,12,34,32 45,78,12,34,32
排序算法:选择排序
思路:在要排列的一组数( n n n个)中,选出最小的一个数与第1个位置的数交换;然后在剩下的数当中再找最小的与第2个位置的数交换,依次类推,直到第个 n − 1 n-1 n−1元素和第个 n n n元素比较为止。
例如:对以下这组数字由小到大排序。
45 , 78 , 12 , 34 , 32 45,78,12,34,32 45,78,12,34,32
真题练习
04:对存有8个元素的列表 [49, 38, 65, 97, 76, 13, 27, 50] 按从小到大的顺序进行排序,选择排序第一趟的排序结果是?( )
- A.[13,38,65,97,76,49,27,50]
- B.[13,27,38,49,50,65,76,97]
- C.[97,76,65,50,49,38,27,13]
- D.[13,38,65,50,76,49,27,97]
- 参考答案:A
- 试题解析:选出最小的13和第一个位置上的49交换位置。第一趟排序之后的序列为[13,38,65,97,76,49,27,50],选择A。
项目制作:“三个数排序”
2022.09 编程题 三个数排序(利用交换排序)
输入三个数,比较三个数的大小,并将这三个数按照从小到大的顺序说出。
1. 准备工作
(1)保留小猫角色,默认位置;
(2)白色背景。
2. 功能实现
(1)依次询问输入三个数;
(2)按下空格键,小猫从小到大说出三个数,三个数之间用逗号隔开。
3. 评分标准
(1)使用询问并等待输入三个数;(3分)
(2)按下空格键后,小猫能够按照从小到大的顺序说出三个数(10分),格式为“X,Y,Z”(2分)。
项目制作:“成绩查询”
2022.06 编程题 成绩查询(利用交换排序)
期末考试结束了,小朋友想知道自己考试的成绩和班级排名,让我们一起来实现这个功能吧!
1. 准备工作
(1)保留默认白色背景和小猫角色;
(2)创建名为“姓名”和“成绩”的列表,按照图1输入相关内容。
2. 功能实现
(1)点击小绿旗,小猫询问“你要查询谁的成绩?”
(2)如果输入的姓名没在“姓名”列表中,小猫说“此姓名无效!”2秒,如图2,程序结束;
(3)如果输入的姓名在“姓名”列表中,小猫可以根据给定的姓名,查询出对应的成绩,如图3;
(4)对成绩进行降序排列,并说出该成绩的序号(名次),如图4。
3. 评分标准
(1)正确创建列表“姓名”和“成绩”(1分),只要多于三个姓名和成绩即可,不一定跟题目数据一致(1分);
(2)小猫询问,能够判断姓名不在列表中情况;(3分)
(3)姓名在列表中,说出成绩;(4分)
(4)对成绩列表进行降序排列,需要有降序排序的过程;(4分)
(5)让小猫说出该成绩在“成绩”列表的序号。(2分)
项目制作:“排序”
2019.12 编程题 排序(利用插入排序)
1. 准备工作
(1)选择空白背景;
(2)保留小猫角色。
2. 功能实现
(1)制作一个新的积木,文字标签为“排序”,添加三个输入项,以便于输入三个待排序的数字;
(2)在自定义积木的三个输入框中,输入任意三个数字,点击绿旗。
(3)名称为“排序”的列表中,将按照从大到小的顺序排列。
项目制作:“森林运动会”
2021.12 编程题 森林运动会(利用插入排序)
在森林运动会中,小猫、小狗、小兔子、乌龟、小猴子参加了800米耐力跑项目,分别耗时3分25秒、4分15秒、3分45秒、4分45秒、4分5秒。请设计程序实现自动排名。
排序前
排序后
1. 准备工作
(1)保留小猫角色及空白背景;
2. 功能实现
(1)建立名为“耐力跑”的列表,用于记录运动员的成绩,以秒为单位;
(2)点击绿旗,初始化列表,依次往列表中加入:205,255,225,285,245;
(3)点击小猫,对运动员的成绩进行降序排列。
3. 评分标准
(1)初始化列表,删除所有项后,加入成绩;(2分)
(2)点击小猫后,排序降序排列正确;(5分)
(3)正确删除、替换链表中的数据;(2分)
(4)正确使用循环的嵌套;(1分)