欢迎来到课桌文档! | 帮助中心 课桌文档-建筑工程资料库
课桌文档
全部分类
  • 党建之窗>
  • 感悟体会>
  • 百家争鸣>
  • 教育整顿>
  • 文笔提升>
  • 热门分类>
  • 计划总结>
  • 致辞演讲>
  • 在线阅读>
  • ImageVerifierCode 换一换
    首页 课桌文档 > 资源分类 > DOCX文档下载  

    第十五章基本排序算法.docx

    • 资源ID:980498       资源大小:123.20KB        全文页数:5页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    第十五章基本排序算法.docx

    第十五章基本排序算法一、Python中的排序函数1.(key,reverse)列表自带排序方法,key控制排序的关键字,reverse参数用于控制升降序alist=5,3,4,2,1(reverse=True)print(alist)reverse默认为FalSe(升序)#运行结果15,4,3,2,1alist=(5,9),(3,7),(4,5),(2,8),(1,6)(key=lambdax:xljreverse=True)print(alist)当元素为组合数据类型时,key可以指定排序元素#运行结果(5,9),(2,8),(3,7),(1,6),(4,5)2.sorted(alist,key,reverse)Python内建函数,排序结果作为函数返回值,不修改alist内容,key,reverse参数功能相同alist=(5,9),(3,7),(4,5),(2,8),(1,6)blist=sorted(alistjkey=lambdax:xljreverse=True)print(blist)参数功能基本相同,主要注意使用方式的不同。3.注意和.values的区别Sort.values(列名,ascending=TrueFalse,inplace=FalseTrue)(DaSCending确定升(True)降(FalSe)序,默认升序(True)(2)inlace声明是否用结果替换原表格,默认False不替换二、冒泡排序1.基本冒泡排序代码defbubble_sort(a):foriinrange(l,len(a):#冒泡轮数forjinrange(len(a)-i):#冒泡方向ifaj>aj+l:#升/降序aj,aj+l=aj+ljajreturnaa=22,13,17,20,14,11print(bubble-sort(a)第一轮冒泡过程冒泡挎序是在一系列数据中,对相邻两个值依次进行比较和调整,让较大的值“下沉(上浮)”,较小的值“上浮(下沉)”的一种排序技术。从第一个值比较到最后一个值的过程称为“一轮”.在一轮排序结束后,最大值(最小值)已经上浮(下沉)到数列的第一个(最后一个)位置。221317201411132217201411131722201411131720221411131720142211131720141122每一轮加工后的结果每轮排序都会将未排序部分的最大值(最小值)已经上浮(下沉)到数列的第一个(最后一个)位置0这个最大值(/小值)将不参与下一轮的比较(或称为“锁定”),经过nT轮排序后,仅剩一个值没有锁定,排序结束。2213172014111317201411221317141120221314111720221311141720221113141720222 .胃泡排序的特性2.1 稳定性【稳定性定义详见17章】冒泡排序是一种稳定的排序算法。故对一组数据进行冒泡排序时,数据交换的次数等于原数据中“逆序对”的个数,与冒泡排序进行的方向无关。2.2 时间复杂度【时间复杂度定义详见17章】对n个元素的数组,用冒泡排序算法进行排序时,共需比较:(n-l)+(n2)+l=1(次)化简后时间复杂度为OS?)3 .冒泡排序的常见考法3.1 给定外层循环和比较值,根据方向和升降序写出内层和判断语句【例】根据己经给出的条件补全冒泡代码条件外层内层比较从前往后,升序foriinrange(l,len(a)ifaaU+l从前往后,降序foriinrange(len(a)J,-l)ifaj_aj-l从后往前,降序foriinrange(len(a)-l)ifa-aU÷l从后往前,升序foriinrange(len(a)-1,0,-1)ifaU_a|j-l3.2 内层或外层循环不充分外层不充分:对n个元素的数列冒泡排序,外层至少需要n-1轮。当外层循环次数不足时,仅能确定“锁定”部分的元素是有序的。内层循环不充分:对n个元素的数列冒泡排序,第一轮所有值都需要参与比较。当内层循环次数不足时,部分元素将始终不参与排序。3.3 其他常见的变式(1)参与排序的元素不是数值类型,例如字符串(2)分组排序,例如奇偶索引分组,奇偶数分组等(3)根据主要关键字和次要关键字排序(4)其他类型4 .冒泡排序优化试将数组a=7,8,0,Ij6,3,9j4,5,2代入基础冒泡代码,观察程序运行结果。会发现在第7轮排序后数组己经有序,但代码需要再执行两轮才能结束。4.1 通过flag标记提前结束循环基本思路:当某一轮排序没有发生元素交换,则说明数组已经有序defbubble-sort(a):foriinrange(l,len(a):flag=TrueIag初始状态forjinrange(len(a)-i):ifaj>aj+l:aj,aj+l=aj+ljajflag=False#发生交换则标记flagifflag:break#若一轮都未发生交换则说明已经有序returnaa=7j8,0j1,6,3,9,4,5,2print(bubble-sort(a)4.2 通过Start标记,一轮“锁定”多个值基本思路:一轮交换中最后一次交换位置前的值一定有序,可以全部“锁定”。defbubble-sort(a):1 =1whilei<=len(a)-l:start=len(a)-lforjinrange(len(a)-l,i-l,-1):ifaj<aj-l:aj,aj-l=aj-l,ajstart=j-l#记录最后一次比较位置i=start+l#比较位置前的值全部锁定returnaa=7j8,0,1,6j3,9,4,5,2print(bubble-sort(a)三、选择排序1 .基本选择排序代码defselection_sort(a):foriinrange(len(a)-l):k=iforjinrange(i+l,len(a):ifak>aj:#升降序k=j#标记极值位置ak,ai=ai,akreturnaa=22,13,17,20,14,11print(selectionsort(a)每轮加工后的结果选择排序的思路是每一轮都从未排序的值中找到最大值(最小值)放到最左边(最右边),重复n-轮,排序完成。2 .选择排序的特性2.1 稳定性:一般认为选择排序是一种不稳定的算法2.2 时间复杂度:O(M)2.3 选排优化:选排的优化方式一般从提高查找效率或者减少外层循环次数,比如在一轮中同时找多个极值。四、插入排序1.基本插入排序代码五、其他常见的排序算法常见的排序算法还有快速排序、归并排序、堆排序、桶排序等。剩余的这些排序方式同学仅作了解即可,学有余力的同学可以自行到附录部分继续学习。在选择排序算法时,可以根据实际数据自身的特点来选择相应的算法。I免费增值服务介绍,V学科网(https:WWW3网校通合作校还提供学科网高端社群出品的老师请开讲私享直播课等增值服务。V组卷网(https:ZUjU)是学科网旗下智能题库,拥有小初高全学科超千万精品试题,提供智能组卷、拍照选题、作业、考试测评等服务。扫码关注组卷网解锁更多功能扫码关注学科网每日领取免费资源回复"ppt"免费领180套PPT模板回复"天天领券"来抢免费下载券

    注意事项

    本文(第十五章基本排序算法.docx)为本站会员(夺命阿水)主动上传,课桌文档仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知课桌文档(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-1

    经营许可证:宁B2-20210002

    宁公网安备 64010402000986号

    课桌文档
    收起
    展开