版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
《《Python数据结构与算法》课程实训任务书实训7排序算法【实训目的】应用排序算法:将所学的排序算法应用于实际编程中,提高算法应用能力。性能分析:通过实际运行排序算法,比较不同算法的性能,包括执行速度和资源使用。数据处理:练习从文件读取数据并进行排序,增强数据处理技能。深入理解:通过实践加深对排序算法工作原理的理解。编程技能:提升编程和代码优化技巧。时间复杂度感知:通过实际测量排序时间,直观感受算法的时间复杂度。解决实际问题:通过解决具体问题,如学生成绩排名,增强解决实际问题的能力。代码优化:学习如何优化代码以提高效率和可读性。稳定性认识:了解排序稳定性对结果的影响。自主学习:鼓励自主探索新算法和应用场景。【实训场地】××机房(××实训室)【实训条件】硬件设备:台式电脑,软件设备:Pycharm,word或wps【实训任务】实训任务:学生成绩排名题目描述:你是一名教务处的工作人员,负责管理学生成绩数据。现在你需要编写一个程序,对学生成绩进行排序,并输出排名结果,以便及时了解学生的表现情况。具体要求如下:从文件中读取学生成绩数据,包括学生姓名和对应的成绩。文件内容格式如下:张三,100.00李四,90.5王五,95.32....2.实现至少两种不同的排序算法,并比较它们的性能。3.输出排名前五名的学生姓名和成绩,并输出排序所花费的时间。排序花费时间可以使用time模块的time()方法获取时间戳相减。示例如下:importtimestart_time=time.time()#具体排序操作end_time=time.time()#计算花费时间cost_time=end_time-start_time参考答案:importtime#从文件中读取学生成绩数据defread_grades(filename):grades=[]withopen(filename,'r')asfile:forlineinfile:name,score=line.strip().split(',')grades.append({'name':name,'score':float(score)})returngrades#冒泡排序defbubble_sort_grades(grades):n=len(grades)foriinrange(n):forjinrange(0,n-i-1):ifgrades[j]['score']<grades[j+1]['score']:grades[j],grades[j+1]=grades[j+1],grades[j]returngrades#快速排序defquick_sort_grades(grades):iflen(grades)<=1:returngradespivot=grades[0]left=[xforxingrades[1:]ifx['score']>=pivot['score']]right=[xforxingrades[1:]ifx['score']<pivot['score']]sorted_left=quick_sort_grades(left)sorted_right=quick_sort_grades(right)returnsorted_left+[pivot]+sorted_right#测试代码if__name__=="__main__":filename="scores.txt"grades=read_grades(filename)#冒泡排序start_time=time.time()sorted_grades_bubble=bubble_sort_grades(grades.copy())end_time=time.time()print("冒泡排序:")foriinrange(5):print(f"{i+1}.{sorted_grades_bubble[i]['name']}:{sorted_grades_bubble[i]['score']}")print("冒泡排序花费时间:",end_time-start_time)#快速排序start_time=time.time()sorted_grades_quick=quick_sort_grades(grades.copy())end_time=time.time()print("\n快速排序:")foriinrange(5):print(f"{i+1}.{sorted_grades_quick[i]['name']}:{sorted_grades_quick[i]['score']}")print("快速排序花费时间:",end_time-start_time);【实训注意】×××××(清晰列出本次实训操作的注意点,若有安全方面的注意点,务必重点列出)【拓展任务】拓展任务:希尔排序实现与分析任务描述:步骤1:代码实现希尔排序是插入排序的一种改进版本,它通过比较相隔一定间隔的元素进行交换,从而实现局部排序,最终将间隔逐步减小至1,完成排序过程。请根据7.3.4中的分析,编写Python代码来实现希尔排序算法。参考实现:defshell_sort(arr):n=len(arr)gap=n//2whilegap>0:foriinrange(gap,n):temp=arr[i]j=iwhilej>=gapandarr[j-gap]>temp:arr[j]=arr[j-gap]j-=gaparr[j]=tempgap//=2步骤2:测试测写测试代码,用于验证希尔排序算法的正确性。可以使用一些具有挑战性的测试案例来检验算法的健壮性。比如数据规模大的序列、逆向序列等。参考测试:#编写测试代码,验证希尔排序算法的正确性deftest_shell_sort():arr=[12,34,54,2,3]shell_sort(arr)assertarr==[2,3,12,34,54],"测试成功"arr=[5,4,3,2,1]shell_sort(arr)assertarr==[1,2,3,4,5],"测试成功"#添加更多的测试案例...test_shell_sort()print("测试通过")步骤3:统计交换次数、与插入排序对比。在排序过程中,统计希尔排序的交换次数,并与普通插入排序进行对比。可以采用分析代码的方式,或者是使用代码执行相同的序列进行统计。参考代码defcount_swaps(arr):swaps=0#在排序过程中统计交换次数foriinrange(len(arr)):j=iwhilej>0andarr[j-1]>arr[j]:arr[j-1],arr[j]=arr[j],arr[j-1]swaps+=1j-=1returnswaps#比较希尔排序和插入排序的交换次数arr=[64,34,25,12,22,11,90]swaps_shell_sort=count_swaps(arr.copy())swaps_insertion_sort=count_swaps(arr.copy())print("希尔排序交换次数:",swaps_shell_sort)print("插入排序交换次数:",swaps_insertion_sort)步骤4:分析得出结论根据上述任务实现过程,从时间复杂度、空间复杂度、稳定性、是否原地排序等方面进行算法分析,并与插入排
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 企业控制制度编制手册
- 文化旅游项目合作诚意承诺书8篇范文
- 家用电器行业高效家电产品物流配送策略
- 人才培养与晋升承诺书7篇
- 家庭活动日记周记展示周末的快乐时光(8篇)
- 生产流程标准化操作指南手册
- 互联网营销推广策略与技巧解析手册
- 城市绿化养护与生态环境保护方案手册
- 航空器航行安全技术作业指导书
- 癫痫护理查房:沟通技巧
- (三诊)2026年4月绵阳市高三高考适应性考试历史试卷(含答案)
- 2025年菏泽生物医药职业学院招聘笔试真题
- 2026国家广播电视总局直属事业单位招聘166人备考题库(北京)含答案详解(基础题)
- 药厂卫生管理培训
- 2026年新党章全文测试题及答案
- 中铁电气化局集团有限公司招聘笔试题库2026
- 北京四中2025学年七年级下学期期中英语试卷及答案
- 2026年北京市朝阳区高三一模历史试卷(含答案)
- 工业厂房安全监理实施细则
- 2026中国证券投资者保护基金有限责任公司应届毕业生招聘笔试历年常考点试题专练附带答案详解
- 建筑安全基础培训
评论
0/150
提交评论