资源简介 5.3 运用典型算法 第5单元 程序设计入门 任务 1 运用排序算法 列表 1 数据处理通常会涉及很多数据,这些数据需要一个容器进行管理,这个容器就是数据结构,Python中的数据结构主要有序列(列表、元组等)集合和字典。列表(list)是 Python最常用的序列,具有可变性,可以追加、插、删除和替换元素。 创建列表 创建列表可以使用方括号“[]”将元素括起来,元素之间用逗号分隔。 a=[12,35,56,23] b=['张三','李四','王五'] 列表 1 追加元素 a=[12,35,56,23] a.append(30) #在列表后面追加一个元素 a+=[30,40] #利用“+=”运算符在列表后面追加多个元素 a.extend([30,40]) #利用“extend()”方法在列表后面追加多个元素 要在列表中追加单个元素,可使用 append()方法;要在列表中追加多个元素或另一个列表,可使用“+=”运算符或 extend()方法。 列表 1 插入元素 a=[12,35,56,23] a.insert(2,30) #在列表索引2(第3个元素)位置上插入一个元素 使用insert()方法可以在列表中指定索引位置插入一个元素。 替换元素 使用“=”运算符可以替换列表的元素。 a=[12,35,56,23] a[1]=10 #在列表索引1位置上将35替换为10 列表 1 删除元素 a=[12,35,56,23] a.remove(35) #在列表中查找第一个值为35的元素并删除 a.pop(1) #删除列表索引1位置上的元素 使用 remove()方法或pop()方法可以删除列表中的元素。remove()方法从左至右查找列表中的元素,如果找到匹配的元素则删除;如果找到多个匹配元素,只删除第一个;如果没有找到则提示错误。pop()方法删除指定索引位置上的元素,如果不指定索引位置,则删除最后一个元素。 选择排序算法 2 选择排序基本思路:每次从待排序的数据中选出最小元素,顺序放在之前已经排好序的数据最后,直到全部数据排序完毕。实现方法:取第一个数和后面的数逐一比较,然后一轮之后得到最小的数放在第一个,然后开始取第二个,重复之前的比较。 选择排序算法 2 {5C22544A-7EE6-4342-B048-85BDC9FD1C3A}7 4 5 9 8 2 1 {5C22544A-7EE6-4342-B048-85BDC9FD1C3A}1 4 5 9 8 2 7 {5C22544A-7EE6-4342-B048-85BDC9FD1C3A}1 2 5 9 8 4 7 {5C22544A-7EE6-4342-B048-85BDC9FD1C3A}1 2 4 9 8 5 7 {5C22544A-7EE6-4342-B048-85BDC9FD1C3A}1 2 4 5 8 9 7 {5C22544A-7EE6-4342-B048-85BDC9FD1C3A}1 2 4 5 7 9 8 {5C22544A-7EE6-4342-B048-85BDC9FD1C3A}1 2 4 5 7 8 9 初始状态: 第1轮: 第2轮: 第3轮: 第4轮: 第5轮: 第6轮: 选择排序算法 2 假设排序列表为a,数据个数为n。 a=[7,4,5,9,8,2,1] for i in range(len(a)-1): minIndex=i #记录最小数索引 for j in range(i+1,len(a)): if a[minIndex]>a[j]: #若找到更小的数 minIndex=j #将找到的最小数和未排序的第一个数交换 a[i],a[minIndex]=a[minIndex],a[i] print(a) 插入排序算法 3 插入排序基本思路:每次取出一个待排序的数据元素,按其大小插入到之前已经排好序的数据集中,直到全部待排序元素插入完毕。具体实现方法为:从左边开始取值,然后和它左边的所有元素值进行比较,如果取的值比它左边的值小就与其交换,重复以上操作。 插入排序算法 3 {5C22544A-7EE6-4342-B048-85BDC9FD1C3A}7 4 5 9 8 2 1 {5C22544A-7EE6-4342-B048-85BDC9FD1C3A}4 7 5 9 8 2 1 {5C22544A-7EE6-4342-B048-85BDC9FD1C3A}4 5 7 9 8 2 1 {5C22544A-7EE6-4342-B048-85BDC9FD1C3A}4 5 7 9 8 2 1 {5C22544A-7EE6-4342-B048-85BDC9FD1C3A}4 5 7 8 9 2 1 {5C22544A-7EE6-4342-B048-85BDC9FD1C3A}2 4 5 7 8 9 1 {5C22544A-7EE6-4342-B048-85BDC9FD1C3A}1 2 4 5 7 8 9 初始状态: 第1轮: 第2轮: 第3轮: 第4轮: 第5轮: 第6轮: 插入排序算法 3 假设排序列表为a,数据个数为n。 a=[7,4,5,9,8,2,1] for i in range(1,len(a)): #从第二个数开始 for j in range(i-1,-1,-1): #从外层循环的下标值比较到第一个数 if a[j+1] a[j+1],a[j]=a[j],a[j+1] #较小的值左移 print(a) Python功能库 4 Python既有内置函数和标准库,又有第三方库和工具,可用于文件读写、网络抓取和解析、数据库连接、音视频处理、数据挖掘、机器学习等,灵活运用 Python功能库,能够扩展程序功能,提高编程效率。 通常用 import命令就可以引Python功能库,例如,要与 MySQL数据库建立连接,就要使用第三方库 pymysql,引入这个库的语句为: import pymysql 实践体验 5 编写篮球比赛积分排名程序。 课后拓展 6 采用插入排序算法,对某一字符列表进行降序排序。 操作提示:字符排序是按照字符的ASCII码顺序,且相同字母的大小写其ASCII码不相同。 02 巩固提高 01 讨论与交流 通过网络查阅并讨论其他排序算法。 任务 2 运用查找算法 顺序查找算法 1 顺序查找也称线性查找,即从数据结构线性表的一端开始,顺序扫描,依次将扫描到的关键字与给定值相比较,若相等则表示查找成功;若扫描结束仍没有找到关键字等于给定值的数据,表示查找失败。顺序查找多用于查找对象的排列无规律时。假设查找列表为a,对象个数为n,算法流程图如图所示。 流程图 顺序查找算法 1 a=['B','A','E','F','D','C'] target='E' #查找目标 i=0 #初始查找位置 found=False #查找是否成功标志 while i if a[i]==target: #查找匹配对象 found=True else: i+=1 #未找到继续扫描下一个对象 print(found) 示例代码 二分查找算法 2 二分查找也称折半查找,比顺序查找的效率高,但它要求待查数据结构是有序排列的,适用于不经常变动且查找频率较高的有序数据。二分查找从数据结构的中间位置开始,如果中间元素正好与查找关键字相等,则查找成功;否则利用中间位置将数据分成前、后两个部分,如果中间元素大于查找关键字,则继续在前一半数据中查找,否则继续在后一半数据中查找,重复这样的操作,每一次比较都使搜索范围缩小一半。 二分查找算法 2 如要在序列“10,20,40,60,70,80,90”中查找70,查找过程示意图如图所示。 {5C22544A-7EE6-4342-B048-85BDC9FD1C3A}10 20 40 60 70 80 90 {5C22544A-7EE6-4342-B048-85BDC9FD1C3A}70 80 90 {5C22544A-7EE6-4342-B048-85BDC9FD1C3A}70 第1轮: 第2轮: 第3轮: 偏小 偏大 正确 二分查找算法 2 假设查找列表a,对象个数为n。 a=[10,20,40,60,70,80,90] #有序列表 target=70 #查找目标 i=0 #初始查找位置 j=len(a)-1 while i<=j: m=(i+j)//2 #取中间值 if a[m]==target: print("所查对象位置下标:",m) break elif a[m]>target: j=m-1 else: i=m+1 流程图 示例代码 实践体验 3 编写英语单词默写程序。 课后拓展 4 02 巩固提高 01 讨论与交流 通过网络查阅并讨论其他查找算法,讨论5.2任务2中猜数字游戏,用哪种查找方式速度最快。 某公司举行新产品发布会,参会客户都进行了登记,采用二分查找算法,在登记表中查找是否有某一客户参会。操作提示:需要先按照客户名称排序。 课后拓展 5 03 探究与合作 1.玩转“汉诺塔”游戏——递归算法 “汉诺塔”是一个古老的益智游戏,如图所示,木板上有3根柱子,分别是原始柱、借力柱和目标柱,原始柱上有若干个圆盘,规定每次只能移动一个圆盘,且小的圆盘只能叠在大的圆盘上面。请设计算法,用尽可能少的次数把所有圆盘从原始柱全部移动到目标柱上。 操作提示:递归算法是一种直接或者间接调用自身的算法(如函数的自调用),它体现了“以此类推” “用同样的步骤重复”的思想,可以使算法的描述简洁,易于理解,其实质是把问题转换为规模缩小了的同类问题。 课后拓展 5 03 探究与合作 2.绘制递归图形 Python程序中内置了大量的函数,turtle模块是其中一个绘制图形的函数库,就像一只小乌龟,在一个横轴为x、纵轴为y的坐标系原点(0,0)位置开始,根据一组函数指令的控制,在这个平面坐标系中移动,从而在它爬行的路径上绘制了图形。尝试绘制一个自己喜欢的递归图形。 单元小结 6 本单元主要学习了算法的基本概念,计算机程序、程序设计语言、程序基本结构、Python基本语法及排序算法、查找算法等典型算法的基础知识,初步掌握了程序设计的方法,能使用程序设计工具编辑、运行和调试简单的程序,具备了运用程序设计解决简单问题的初步能力。 谢谢观看! 展开更多...... 收起↑ 资源预览