资源简介 (共25张PPT)查找算法的应用生活实例引入学生选课信息表中查找某同学的选课情况航空公司VIP会员积分查询不少航空公司都会提供优惠的会员服务,当某会员飞行里程累计达到一定数量后,可以使用里程积分兑换奖励机票或奖励升舱等服务。现给定某航空公司部分VIP会员的飞行里程、积分等信息航空公司VIP会员积分查询不少航空公司都会提供优惠的会员服务,当某会员飞行里程累计达到一定数量后,可以使用里程积分兑换奖励机票或奖励升舱等服务。现给定某航空公司部分VIP会员的飞行里程、积分等信息,如右图所示,要求实现根据VIP号码快速查询会员积分的功能。VIP号 姓名 飞行里程(km) 积分600214 韩江辉 16801 519601278 蒋志来 5321 78600815 李亚东 28745 436607854 王庆生 1861 39605719 李燕 7493 138603532 王晓燕 6875 102600101 郑煜明 14253 236600087 蔡佳宁 112703 958思考:如何根据VIP号码快速查询会员积分呢?VIP号 姓名 飞行里程(km) 积分600214 韩江辉 16801 519601278 蒋志来 5321 78600815 李亚东 28745 436607854 王庆生 1861 39605719 李燕 7493 138603532 王晓燕 6875 102600101 郑煜明 14253 236600087 蔡佳宁 112703 958第一步:抽象与建模“600101”第一步:抽象与建模VIP号 姓名 飞行里程(km) 积分600214 韩江辉 16801 519601278 蒋志来 5321 78600815 李亚东 28745 436607854 王庆生 1861 39605719 李燕 7493 138603532 王晓燕 6875 102600101 郑煜明 14253 236600087 蔡佳宁 112703 958一条记录查找某会员的积分信息根据 VIP号查找到该会员的记录第二步:设计算法与数据结构思考:如何用Python实现根据VIP号码找到该会员的记录呢?1. 存储所有会员记录2. 实现查找功能VIP号 姓名 飞行里程(km) 积分600214 韩江辉 16801 519601278 蒋志来 5321 78600815 李亚东 28745 436607854 王庆生 1861 39605719 李燕 7493 138603532 王晓燕 6875 102600101 郑煜明 14253 236600087 蔡佳宁 112703 958第二步:设计算法与数据结构列点击此处添加正文,请言简意赅的阐述观点。存储所有会员记录点击此处添加正文,请言简意赅的阐述观点。数组点击此处添加正文,请言简意赅的阐述观点。行点击此处添加正文,请言简意赅的阐述观点。第二步:设计算法与数据结构存储所有会员记录1.采用4个一维数组按列存储a数组:存储VIP号码b数组:存储姓名c数组:存储飞行里程(km)d数组:存储积分VIP号 姓名 飞行里程(km) 积分600214 韩江辉 16801 519601278 蒋志来 5321 78600815 李亚东 28745 436607854 王庆生 1861 39605719 李燕 7493 138603532 王晓燕 6875 102600101 郑煜明 14253 236600087 蔡佳宁 112703 958abcd第二步:设计算法与数据结构VIP号 姓名 飞行里程(km) 积分600214 韩江辉 16801 519601278 蒋志来 5321 78600815 李亚东 28745 436607854 王庆生 1861 39605719 李燕 7493 138603532 王晓燕 6875 102600101 郑煜明 14253 236600087 蔡佳宁 112703 958存储所有会员记录1.采用4个一维数组按列存储2.采用1个一维数组按行存储a数组:每个元素对应每位会员的记录信息a[i]存储第i条记录a[i][3]存储记录的第3个数据项,积分第二步:设计算法与数据结构实现查找功能 顺序查找 二分查找查找对象 无要求 有序最少查找次数 1 1最多查找次数 n int()+1平均查找次数 (n+1)/2 +1)-1查找可采用顺序查找算法或二分查找算法:请同学们根据表格思考:要实现快速查询,哪一种查找算法的效率更高?查找前要根据VIP号码为关键字进行排序第二步:设计算法与数据结构1.采用4个一维数组按列存储2.采用1个一维数组按行存储选用哪种数据结构存储更方便呢?二分查找算法1.查找前排序过程中需要实现记录的两两交换第三步:编写程序会员的记录信息存储在“vip.csv”文件中开始读取”vip.csv”文件中数据保存到数组a中按照vip号码对数组a中元素进行冒泡排序打印排序后的vip记录信息输入查询的vip号码二分查找输出查找结果结束第三步:编写程序会员的记录信息存储在“vip.csv”文件中开始读取”vip.csv”文件中数据保存到数组a中按照vip号码对数组a中元素进行冒泡排序打印排序后的vip记录信息输入查询的vip号码二分查找输出查找结果结束import csvcsvFile=open("vip.csv","r") #打开文件reader=csv.reader(csvFile)a=[]for item in reader: #将每行数据(列表)依次追加到列表a中a.append(item)csvFile.close() #关闭文件for i in range(1,len(a)):for j in range(1,len(a)-i): #从第1条记录开始比较if int(a[j][0])>int(a[j+1][0]): #按照第0个数据项vip号排列temp=a[j]a[j]=a[j+1]a[j+1]=temp第三步:编写程序会员的记录信息存储在“vip.csv”文件中开始读取”vip.csv”文件中数据保存到数组a中按照vip号码对数组a中元素进行冒泡排序打印排序后的vip记录信息输入查询的vip号码二分查找输出查找结果结束print('排序后的会员信息:')for i in range(len(a)):print(a[i])key=int(input("请输入要查找的VIP号:"))i=1;j=len(a)-1flag=False #设置查找标记while i<=j:m=(i+j)//2 #取中间索引if int(a[m][0])==key:flag=True;break #查找成功,结束查找if keyj=m-1else: #查询右区间i=m+1第三步:编写程序会员的记录信息存储在“vip.csv”文件中开始读取”vip.csv”文件中数据保存到数组a中按照vip号码对数组a中元素进行冒泡排序打印排序后的vip记录信息输入查询的vip号码二分查找输出查找结果结束if flag==True: #查找成功print(a[m][1],"先生/女士,您的积分为:",a[m][3])else:print("找不到VIP号对应的用户信息!")第三步:编写程序会员的记录信息存储在“vip.csv”文件中开始读取”vip.csv”文件中数据保存到数组a中按照vip号码对数组a中元素进行冒泡排序打印排序后的vip记录信息输入查询的vip号码二分查找输出查找结果结束封装成函数第三步:编写程序import csv#数据读入csvFile=open("vip.csv","r")reader=csv.reader(csvFile)a=[]for item in reader:a.append(item)csvFile.close()#排序def bubble_sort(d):for i in range(1,len(d)):for j in range(1,len(d)-i):if int(d[j][0])>int(d[j+1][0]):temp=d[j]d[j]=d[j+1]d[j+1]=temp#二分查找def bsearch(s,array):i=1;j=len(array)-1 #查找范围不包含第一行数据while i<=j:m=(i+j)//2if int(array[m][0])==s:return mif sj=m-1else:i=m+1return -1 #未找到返回-1bubble_sort(a)key=int(input("请输入要查找的VIP号:"))m=bsearch(key,a)if m!=-1:print(a[m][1],"先生/女士,您的积分为:",a[m][3])else:print("找不到VIP号对应的用户信息!")读入数据冒泡排序二分查找输出结果调用冒泡排序函数调用二分查找函数应用实践:学生“七选三”选课查询某校高一学期结束,学生进行了“七选三”预选课,选课信息存储在“course.csv”中,如右图所示,前3列分别存储学生的学号、姓名、班号,第4列到第10列分别表示物理、化学、生物、政治、历史、地理和技术的选课情况,其中“1”表示选择,“0”表示未选择。应用实践:学生“七选三”选课查询李老师编写了一个查询程序,此程序有以下功能:程序运行后自动从“course.csv”中读取学生信息,按照学号从小到大的顺序将所有学生信息排序,并打印输出。输入一个学生的学号,程序自动查找是否存在该学生,若找到,输出该生的“七选三”科目,如果没有找到,则显示“没有查询到该学号信息!”。查询结果如右图所示。应用实践:学生“七选三”选课查询程序如下,请同学们根据注释,将横线处缺失的代码补充完整。import csvcsvFile=open("course.csv","r") #打开文件reader=csv.reader(csvFile)a=[]for item in reader:a.append(item)csvFile.close()for i in range(1,len(a)):for j in range(1,len(a)-i): #从第1条记录开始比较#按照每条记录的第0个元素学号进行升序排列if ________①_______:temp=a[j]a[j]=a[j+1]a[j+1]=tempprint('排序后:’)for i in range(len(a)):print(a[i])key=int(input("请输入要查找的学号:"))i=1; j=len(a)-1 #查找范围不包含第一行数据flag=False #设置查找标记while i<=j:m=(i+j)//2 #取中间索引if int(a[m][0])==key:________②_________ #查找成功,结束查找breakif ________③________: #查找学号<当前学号j=m-1 #查询左区间else:i=m+1#根据查找结果输出学生的选考科目应用实践:学生“七选三”选课查询#根据查找结果输出学生的选考科目b=['物理','化学','生物','政治','历史','地理','技术']if flag==True: #查找成功print(a[m][1],"同学,您的7选3科目为:")for j in range(3,10):if a[m][j]=='1':print(b[j-3],end=" ")else:print("找不到此学号对应的同学信息!")应用实践:学生“七选三”选课查询程序如下,请同学们根据注释,将横线处缺失的代码补充完整。import csvcsvFile=open("course.csv","r") #打开文件reader=csv.reader(csvFile)a=[]for item in reader:a.append(item)csvFile.close()for i in range(1,len(a)):for j in range(1,len(a)-i): #从第1条记录开始比较#按照每条记录的第0个元素学号进行升序排列if ________①_______:temp=a[j]a[j]=a[j+1]a[j+1]=tempprint('排序后:’)for i in range(len(a)):print(a[i])key=int(input("请输入要查找的学号:"))i=1; j=len(a)-1 #查找范围不包含第一行数据flag=False #设置查找标记while i<=j:m=(i+j)//2 #取中间索引if int(a[m][0])==key:________②_________ #查找成功,结束查找breakif ________③________: #查找学号<当前学号j=m-1 #查询左区间else:i=m+1#根据查找结果输出学生的选考科目应用实践:学生“七选三”选课查询程序如下,请同学们根据注释,将横线处缺失的代码补充完整。import csvcsvFile=open("course.csv","r") #打开文件reader=csv.reader(csvFile)a=[]for item in reader:a.append(item)csvFile.close()for i in range(1,len(a)):for j in range(1,len(a)-i): #从第1条记录开始比较#按照每条记录的第0个元素学号进行升序排列if ________①_______:temp=a[j]a[j]=a[j+1]a[j+1]=tempprint('排序后:’)for i in range(len(a)):print(a[i])key=int(input("请输入要查找的学号:"))i=1; j=len(a)-1 #查找范围不包含第一行数据flag=False #设置查找标记while i<=j:m=(i+j)//2 #取中间索引if int(a[m][0])==key:________②_________ #查找成功,结束查找breakif ________③________: #查找学号<当前学号j=m-1 #查询左区间else:i=m+1#根据查找结果输出学生的选考科目读入数据冒泡排序二分查找int(a[j][0])>int(a[j+1][0])flag=Truekey小结与练习查找算法的应用实际问题航空公司VIP会员积分查询抽象与建模编写程序上机调试设计算法与数据结构哪种数据结构存储更方便哪种算法效率更高 展开更多...... 收起↑ 资源预览