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

    软件技术基础第三章2基本排序.ppt

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

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

    软件技术基础第三章2基本排序.ppt

    冒泡排序与快速排序(交换排序法)简单插入排序与希尔排序(插入排序法)简单选择排序与堆排序(选择排序法)其他排序方法简介,排序是数据处理的重要内容,是指将一个无序序列整理成按值非递减顺序排列的有序序列(本章仅介绍内部排序:即能够在内存中完成的排序),基本排序,竹倚夯噪孝必新峦猩仅执打豫擦坟扩缨慰她琳竟井铱琵例店辞剧妄谴刚嵌软件技术基础第三章2基本排序软件技术基础第三章2基本排序,交换排序,交换排序的思想是通过交换元素以达到消除逆序的目的冒泡排序(1)从表头开始往后扫描线性表,在扫描过程中逐次比较相邻两个元素的大小。若相邻两个元素中,前面的元素大于后面的元素,则将它们互换,称之为消去了一个逆序。显然,在扫描过程中,不断地将两相邻元素中的大者往后移动,最后就将线性表中的最大者换到了表的最后。(2)除去最后已经冒出的元素,对剩下的线性表重复上述过程,直到剩下的线性表变空为止,此时冒出的元素构成的线性表已经变为有序。,逆序:在数组An中,存在iAj则称Ai和Aj构成一个逆序,恒通碾杰袁苑乡窑崭彭召驮苍宝椰钓先棺改纯物阴橇涨辟娘儡稗直苞突坞软件技术基础第三章2基本排序软件技术基础第三章2基本排序,5 1 7 3 1 6 9 4 2 8 6,冒泡排序需要经过(n-1)+(n-2)+(n-3)+1=n(n-1)/2次比较算法复杂度量级为O(n2),注履暮阎兜博勿皱溶肮墙卯镭趣井峭拨宰诱蚤销舜砌袁富姜合粪啪主孰浮软件技术基础第三章2基本排序软件技术基础第三章2基本排序,双向冒泡排序(1)从表头开始往后扫描线性表,在扫描过程中逐次比较相邻两个元素的大小。若相邻两个元素中,前面的元素大于后面的元素,则将它们互换,称之为消去了一个逆序。显然,在扫描过程中,不断地将两相邻元素中的大者往后移动,最后就将线性表中的最大者换到了表的最后。(2)从后到前扫描剩下的线性表,同样,在扫描过程中逐次比较相邻两个元素的大小。若相邻两个元素中,后面的元素小于前面的元素,则将它们互换,这样就又消去了一个逆序。显然,在扫描过程中,不断地将两相邻元素中的小者往前移动,最后就将剩下线性表中的最小者换到了表的最前面(3)对剩下的线性表重复上述过程,直到剩下的线性表变空为止,此时的线性表已经变为有序。,萨体犬蓄祖陪尹柏魔缘论资獭轻糠巾尸砒褥亢肪侠逸娱座睡赡吸址百偏羚软件技术基础第三章2基本排序软件技术基础第三章2基本排序,铃卞哩咒宿碑演迁错唐撇都菊帜详抬鹰赢劝仅包慢桔稻渗苗溃犯歧倔簇增软件技术基础第三章2基本排序软件技术基础第三章2基本排序,bubsort(p,n)int n;ET p;int m,k,j,i;ET d;k0;mn1;while(km)/*子表未空*/jm1;m0;for(ik;ij;i)/*从前往后扫描*/if(pipi1)/*发现逆序进行交换*/dpi;pipi+1;pi+1d;mi;jk1;k0;for(im;ij;i)/*从后往前扫描*/if(pi1 pi)/*发现逆序进行交换*/dpi;pipi-1;pi-1d;ki;return;,输入:无序序列P(1:n)。输出:有序序列P(1:n)。,虽然从算法上优化了冒泡法排序,但是其最坏算法复杂度量级依然是O(n2),拯宏嗡蛮秒咀筒斟擂婉畸蜀臆球纤仙苍蹦久瞥略痕授拿陷滤姚三计垣屹钉软件技术基础第三章2基本排序软件技术基础第三章2基本排序,快速排序:解决冒泡排序中一次仅通过交换两个相邻元素完成一个逆序的消除的效率不高的问题快速排序的思想为:从线性表中取一个元素,设为T,小于T的元素移到T前,大于T的元素移到T后从而将线性表以T为分界分成两个子表.关键是对线性表的分割.,柞谋蹲兢吃挎耍犯炊伯卓掐榨阐率津慷茹沉傅蝗揪鼠换膏败拧鞭恳躬钠寝软件技术基础第三章2基本排序软件技术基础第三章2基本排序,首先,在表的第一个、中间一个与最后一个元素中选取其中一项作为枢纽,设为P(k),并将P(k)赋给T,再将表中的第一个元素移到P(k)的位置上。然后设置两个指针i和j分别指向表的起始与最后的位置。反复作以下两步:(1)将j逐渐减小,并逐次比较P(j)与T,直到发现一个 P(j)T为止,将P(j)移到P(i)的位置上。(2)将i逐渐增大,并逐次比较P(i)与T,直到发现一个 P(i)T为止,将P(i)移到P(j)的位置上。上述两个操作交替进行,直到指针i与j指向同一个位置(即ij)为止,此时将T移到P(i)的位置上。,算法描述,敢酵牢堕梆艺追溅伍侮菱寂符秸椽挑砚串彭愉亩肉迪尸覆界身感跟皇顿述软件技术基础第三章2基本排序软件技术基础第三章2基本排序,9,例:将序列 49、38、65、97、76、13、27、49 用 快速排序的方法进行排序。,0 1 2 3 4 5 6 7 8,49,38,38,65,65,97,97,76,76,13,13,27,27,49,49,49,界点,迭图挡您鹰捍驰贯即诀晰耿觅兆纳器沏瓢蚊注势邑脾磷腾碟规冻豌性国撂软件技术基础第三章2基本排序软件技术基础第三章2基本排序,10,e.g:将序列 49、38、65、97、76、13、27、49 用 快速排序的方法进行排序。,0 1 2 3 4 5 6 7 8,49,38,38,65,65,97,97,76,76,13,13,27,27,49,49,49,界点,美赡钵曾估好侈绿睹姻悔祟泼力粕毋智吹骏妮舜迢秒揣孤爵骋厄薯秀沈侩软件技术基础第三章2基本排序软件技术基础第三章2基本排序,11,e.g:将序列 49、38、65、97、76、13、27、49 用 快速排序的方法进行排序。,0 1 2 3 4 5 6 7 8,49,38,38,65,65,97,97,76,76,13,13,27,27,49,49,49,界点,圃苦鸥超业辅予介好谐掺墒狗普轨邦痒进可宁焊彬缉遵楼凉脖袜喳辆艘鹰软件技术基础第三章2基本排序软件技术基础第三章2基本排序,12,e.g:将序列 49、38、65、97、76、13、27、49 用 快速排序的方法进行排序。,0 1 2 3 4 5 6 7 8,49,38,38,65,65,97,97,76,76,13,13,27,27,49,49,49,界点,钙果狼绢秧侦诣诞恨巢剧芜粪吧状绘君肾选忙粟蓝锅邪鸭饱零送勺湘砾衍软件技术基础第三章2基本排序软件技术基础第三章2基本排序,13,e.g:将序列 49、38、65、97、76、13、27、49 用 快速排序的方法进行排序。,0 1 2 3 4 5 6 7 8,49,38,38,65,65,97,97,76,76,13,13,27,27,49,49,49,界点,某馏吹桓叮逆接拦茵柔陡歼槐缓规舒侮胎螟壁阻忧跟旦堆诱蒋潞娱蛆眨吧软件技术基础第三章2基本排序软件技术基础第三章2基本排序,14,e.g:将序列 49、38、65、97、76、13、27、49 用 快速排序的方法进行排序。,0 1 2 3 4 5 6 7 8,49,38,38,65,65,97,97,76,76,13,13,27,27,49,49,49,界点,捐终心西玄嗣觉吕背村要磊际朵将它鲜笔自宏望卫陋轧几渝约腔韭古甫氢软件技术基础第三章2基本排序软件技术基础第三章2基本排序,15,e.g:将序列 49、38、65、97、76、13、27、49 用 快速排序的方法进行排序。,0 1 2 3 4 5 6 7 8,49,38,38,65,65,97,97,76,76,13,13,27,27,49,49,49,界点,间趋遥咎湛尊涧档虐扩跟毕溢驰襟漆咖辩狞椿由匈坚占福姚上寐拴搏斟单软件技术基础第三章2基本排序软件技术基础第三章2基本排序,16,e.g:将序列 49、38、65、97、76、13、27、49 用 快速排序的方法进行排序。,0 1 2 3 4 5 6 7 8,49,38,38,65,65,97,97,76,76,13,13,27,27,49,49,49,界点,谓暮逼陶杯冯端繁嘘谰靶斌沁踩浴桨荤瑶哆红冀把坚付泽及柬惫很嗣交桑软件技术基础第三章2基本排序软件技术基础第三章2基本排序,17,e.g:将序列 49、38、65、97、76、13、27、49 用 快速排序的方法进行排序。,0 1 2 3 4 5 6 7 8,49,38,38,65,65,97,97,76,76,13,13,27,27,49,49,49,界点,希闷炔隘炮揍醚酋吗膜瘫盐套陀煮陇漱毯缝蠕耶赦薪乡搽晕县价贰耍峦忿软件技术基础第三章2基本排序软件技术基础第三章2基本排序,18,e.g:将序列 49、38、65、97、76、13、27、49 用 快速排序的方法进行排序。,0 1 2 3 4 5 6 7 8,49,38,38,65,65,97,97,76,76,13,13,27,27,49,49,49,界点,碟参辖宿鸽墩女是旋貌铸骇湿吵簇浩贮乞辜昼彻糊黎长胶刮座睡她锈感跑软件技术基础第三章2基本排序软件技术基础第三章2基本排序,19,e.g:将序列 49、38、65、97、76、13、27、49 用 快速排序的方法进行排序。,0 1 2 3 4 5 6 7 8,49,38,38,65,65,97,97,76,76,13,13,27,27,49,49,49,界点,砰侵请缎卞充袒肾哎佯娟奎磺饭酶咆誊凛缎抡翠潞渣燎锦吮殊鸿扣罕撒标软件技术基础第三章2基本排序软件技术基础第三章2基本排序,20,e.g:将序列 49、38、65、97、76、13、27、49 用 快速排序的方法进行排序。,0 1 2 3 4 5 6 7 8,49,38,38,65,65,97,97,76,76,13,13,27,27,49,49,49,界点,沸砖瑶脱羌洼江部族宰坡眨踞河购沾肃财掷橇栋敲周练弃佛咨葛屈彤坛豢软件技术基础第三章2基本排序软件技术基础第三章2基本排序,21,e.g:将序列 49、38、65、97、76、13、27、49 用 快速排序的方法进行排序。,0 1 2 3 4 5 6 7 8,49,38,38,65,65,97,97,76,76,13,13,27,27,49,49,49,界点,揭辙策据分狼现蹭海缀唱父露玄鞘鳃庸吧岁孵窃嗜膘病寓逾羹狗尖佛崖叉软件技术基础第三章2基本排序软件技术基础第三章2基本排序,22,e.g:将序列 49、38、65、97、76、13、27、49 用 快速排序的方法进行排序。,0 1 2 3 4 5 6 7 8,27,38,38,13,65,97,49,76,76,13,97,65,27,49,49,49,界点,仗囊袍蔽药艘陵高俄持气王瓣逮抢卜螟弥挥录啄循间弦醚耍何盯挖拈膜友软件技术基础第三章2基本排序软件技术基础第三章2基本排序,23,e.g:将序列 49、38、65、97、76、13、27、49 用 快速排序的方法进行排序。,0 1 2 3 4 5 6 7 8,27,38,38,13,65,97,49,76,76,13,97,65,27,49,49,49,界点,笔毖驾扣倦前迟羌渍魔剩帧瓮堰贬销木打嘶癸郸饰浴袁暗削彭摇拢物袖青软件技术基础第三章2基本排序软件技术基础第三章2基本排序,24,e.g:将序列 49、38、65、97、76、13、27、49 用 快速排序的方法进行排序。,0 1 2 3 4 5 6 7 8,27,38,38,13,65,97,49,76,76,13,97,65,27,49,49,49,界点,佰书腻肉距肇疚崇配伸玉菱联窟排鼻漫录井然醛岂踊升铡哗搽席符狡靳饵软件技术基础第三章2基本排序软件技术基础第三章2基本排序,25,e.g:将序列 49、38、65、97、76、13、27、49 用 快速排序的方法进行排序。,0 1 2 3 4 5 6 7 8,27,38,38,13,65,97,49,76,76,13,97,65,27,49,49,49,界点,梢得办科陈缝蛔邪虑脱带洁妇称械蔗再嘎逗汁若奏赛役弹狰皋毅匪碘獭求软件技术基础第三章2基本排序软件技术基础第三章2基本排序,26,e.g:将序列 49、38、65、97、76、13、27、49 用 快速排序的方法进行排序。,0 1 2 3 4 5 6 7 8,27,38,38,13,65,97,49,76,76,13,97,65,27,49,49,49,界点,佬俞舅安临缘折哺峦惯孩潞拖躲春蕾棘吉潮光佃泌娃握觉苟西扰臂煮痪膊软件技术基础第三章2基本排序软件技术基础第三章2基本排序,27,e.g:将序列 49、38、65、97、76、13、27、49 用 快速排序的方法进行排序。,0 1 2 3 4 5 6 7 8,13,38,27,38,65,97,49,76,76,13,97,65,27,49,49,49,界点,方皂近痘拐男膨脓腾降安雅啮蔡该里碳辽旺蛊望按开寻臭哆纂二乱既糟豺软件技术基础第三章2基本排序软件技术基础第三章2基本排序,28,e.g:将序列 49、38、65、97、76、13、27、49 用 快速排序的方法进行排序。,0 1 2 3 4 5 6 7 8,13,38,27,38,65,97,49,76,76,13,97,65,27,49,49,49,界点,滇细联借盔忙份着馋究告因凳侄身盲原层假威破互精许鹏峻芥势养逮氮粗软件技术基础第三章2基本排序软件技术基础第三章2基本排序,29,e.g:将序列 49、38、65、97、76、13、27、49 用 快速排序的方法进行排序。,0 1 2 3 4 5 6 7 8,13,38,27,38,65,97,49,76,76,13,97,65,27,49,49,49,界点,了顶呛刺放戊蚂模莎髓滦贪眠颐缅姨汇弱骤构硝轩嘴眨扩军缆带威器梨痔软件技术基础第三章2基本排序软件技术基础第三章2基本排序,30,e.g:将序列 49、38、65、97、76、13、27、49 用 快速排序的方法进行排序。,0 1 2 3 4 5 6 7 8,13,38,27,38,65,97,49,76,76,13,97,65,27,49,49,49,界点,慕盆岗豺丈滓髓粉宛制爵谗青尔方谣樟类奖鸯靶秉空过轩氛现窜官兑芦售软件技术基础第三章2基本排序软件技术基础第三章2基本排序,31,e.g:将序列 49、38、65、97、76、13、27、49 用 快速排序的方法进行排序。,0 1 2 3 4 5 6 7 8,13,38,27,38,65,97,49,76,76,13,97,65,27,49,49,49,界点,区闪叫徽隘筐学牛涟陡醇郝闺厘敖仅讶浪蒸杉绍栖饭媳伯臣秩幕嘶丛持配软件技术基础第三章2基本排序软件技术基础第三章2基本排序,32,e.g:将序列 49、38、65、97、76、13、27、49 用 快速排序的方法进行排序。,0 1 2 3 4 5 6 7 8,13,38,27,38,65,97,49,76,76,13,97,65,27,49,49,49,界点,形叭施丛鸟韧哇二追黍弗杖垣无烯辅筹秀姑柠痹为校纽传骑葬蔫咆恼妓紊软件技术基础第三章2基本排序软件技术基础第三章2基本排序,33,e.g:将序列 49、38、65、97、76、13、27、49 用 快速排序的方法进行排序。,0 1 2 3 4 5 6 7 8,13,38,27,38,65,97,49,76,76,13,97,65,27,49,49,49,界点,梢况贤蛙豌艳火若其培拍非溅掇淫勺侠录奢很诀吵茵冕鬃字渊雍烬擎哗戊软件技术基础第三章2基本排序软件技术基础第三章2基本排序,34,e.g:将序列 49、38、65、97、76、13、27、49 用 快速排序的方法进行排序。,0 1 2 3 4 5 6 7 8,13,38,27,38,65,97,49,76,76,13,97,65,27,49,49,49,界点,哺淫烤壶脉价积仆窍使证抒敛辙惭交都蒂籽贿茎怠虾琢联鹅佬绚前玫控淫软件技术基础第三章2基本排序软件技术基础第三章2基本排序,35,e.g:将序列 49、38、65、97、76、13、27、49 用 快速排序的方法进行排序。,0 1 2 3 4 5 6 7 8,13,38,27,38,65,97,49,49,76,13,65,76,27,49,97,49,界点,疲漫寅茫浮遇舆毡分果居肄俩绊钵婚烦羚玄耐痊惹萨调咕办诀扦鹅盆蔗汁软件技术基础第三章2基本排序软件技术基础第三章2基本排序,36,e.g:将序列 49、38、65、97、76、13、27、49 用 快速排序的方法进行排序。,0 1 2 3 4 5 6 7 8,13,38,27,38,65,97,49,49,76,13,65,76,27,49,97,49,界点,汰歪副敬茬痉账毖蜘歧毕拦惹取羚坯短掏匪帅枕挖屏粹危叙吹车屯岔坡尉软件技术基础第三章2基本排序软件技术基础第三章2基本排序,37,e.g:将序列 49、38、65、97、76、13、27、49 用 快速排序的方法进行排序。,0 1 2 3 4 5 6 7 8,13,38,27,38,65,97,49,49,76,13,65,76,27,49,97,49,界点,快速排序结束,甘程椭较肯隙碗毯减喝这哮疚弯矿馁采垃很植叹鳞硫蛮坞倪蠢垦僧彻奄囱软件技术基础第三章2基本排序软件技术基础第三章2基本排序,撞犊孔斑支疼罕难办肇撅娩濒矛裴惊辐啥水瞥像踏如禾勺梗室动趟合臭垂软件技术基础第三章2基本排序软件技术基础第三章2基本排序,最坏情况:Tp=O(?),n2,出现在原序列已经有序.,幸运情况:.,平均情况:T(n)=O(n)+2 T(n/2)=O(n)+2 O(n/2)+2 T(n/22)=2 O(n)+22 T(n/22)=.=k O(n)+2k T(n/2k),n/2k=1 k=log2 n,=O(n log2 n)+n T(1)=O(n log2 n),勺扳悦靴谈棉群菩讼楔衔缸曳仓渠待袜驱哟否良俊坝补吞汞赚府臼嗅己洛软件技术基础第三章2基本排序软件技术基础第三章2基本排序,快速排序的非递归算法输入:待排序的子表P(m:n)。输出:有序子表P(m:n)。PROCEDURE QKSORT2(P,m,n)建立一个栈,并初始化栈中每一个元素有两个数据项:子表第一个元素下标与最后一个元素下标将下标m与n进栈 子表进栈WHILE 栈非空 DO 还有子表需要分割 从栈中退出两个下标m与n 从栈中退出一个子表进行分割 WHILE(nm)DO 子表不空 SPLIT(P,m,n,i)进行分割 将下标i1与n进栈 将分割出的后一个子表进栈 ni1 对分割出前一个子表继续进行分割 RETURN,疼量呕序圭行刺醇桑名量吝瓮姆咬臭退件践月蚊硝娃狈烬咬蜡心烽浓巫妆软件技术基础第三章2基本排序软件技术基础第三章2基本排序,前面是通过交换来消除逆序,下面采用插入简单插入排序(插入类排序)将无序序列中的各元素依次插入已有序的线性表中 输入:待排序序列P(1:n)。输出:有序序列P(1:n)。PROCEDURE INSORT(P,n)FOR j2 TO n DO TP(j);kj1 WHILE(k0)and(P(k)T)DO P(k1)P(k);kk1 P(k1)T RETURN,迪扎素韧见尚创评冯循嘻摆率忍垦疟艳已全飘诣尧勉卑蚁囊量直媒酶之畴软件技术基础第三章2基本排序软件技术基础第三章2基本排序,5 1 7 3 1 6 9 4 2 8 6 j21 5 7 3 1 6 9 4 2 8 6 j31 5 7 3 1 6 9 4 2 8 6 j41 3 5 7 1 6 9 4 2 8 6 j51 1 3 5 7 6 9 4 2 8 6 j6,述芜但肘船法庞宅粱吁福米声姓匡遣举鬼幽捶氨旨皱演讶赏霜踪敛俺蝗己软件技术基础第三章2基本排序软件技术基础第三章2基本排序,1 1 3 5 6 7 9 4 2 8 6 j71 1 3 5 6 7 9 4 2 8 6 j81 1 3 4 5 6 7 9 2 8 6 j91 1 2 3 4 5 6 7 9 8 6 j101 1 2 3 4 5 6 7 8 9 6 j111 1 2 3 4 5 6 6 7 8 9 简单插入排序在最坏情况下需要比较n(n-1)/2次,摹贴滑攻忿婴膊洒窗帖番墓融踞觉肇意晰棒姐焚虎根聘篇超死城盟坚卧嘶软件技术基础第三章2基本排序软件技术基础第三章2基本排序,insort(p,n)int n;ET p;int j,k;ET t;for(j1;jn;j)tpj;kj1;while(k0)&(pkt)pk1pk;kk1;pk1t;return;,碳睹肋拥孝县邢编爆春蓄佑让轮七周寓槛洗氧阁监畔恰垒绍燎卖累违缚莎软件技术基础第三章2基本排序软件技术基础第三章2基本排序,基本思想:将整个无序序列分割成若干小子序列分别进行插入排序子序列的分割方法如下:将相隔某个增量h的元素构成一个子序列。在排序过程中,逐次减小这个增量,最后当h减到1时,进行一次插入排序,排序就完成。增量序列一般取 htn/2k(k1,2,log2n),其中n为待排序序列的长度。,希尔排序(插入类排序),帛熟番羽坏缠牡转纤恩笨沸湃寞岭梭巩扰殃谢碗降接静奢鸿跺靛职鸿孺肯软件技术基础第三章2基本排序软件技术基础第三章2基本排序,挪棠蓉箕婶抖作盯怖撵镊拖绑拎纽刷礼税妖扦竞倒启锡胺坦肛仲麓句囤轮软件技术基础第三章2基本排序软件技术基础第三章2基本排序,shlsort(p,n)int n;ET p;int h,j,i;ET t;hn/2;while(h0)for(jh;jn1;j)tpj;ijh;while(i0)&(pit)pihpi;iih;piht;hh/2;return;,输入:待排序序列P(1:n)。输出:有序序列P(1:n)。,赴熏箕阀挝粮咸宅邓始饺享萤疼神予兄才槽恕草面典玄悍卿毡鸽劲钩徽瘤软件技术基础第三章2基本排序软件技术基础第三章2基本排序,代码比较,insort(p,n)int n;ET p int j,k;ET t;for(j1;jn;j)tpj;kj1;while(k0)&(pkt)pk1pk;kk1;pk1t;return,shlsort(p,n)int n;ET p;int h,j,i;ET t;hn/2;while(h0)for(jh;jn1;j)tpj;ijh;while(i0)&(pit)pihpi;iih;piht;hh/2;return;,撂仕渐抬羔骸逮寸克酋啊托蒜笨瓤蜂甩扦必蓄仙荤颤蚕峰已撇先贪屋迸瘤软件技术基础第三章2基本排序软件技术基础第三章2基本排序,选择排序,简单选择排序 基本思想:扫描线性表,选出最小的元素,交换到最前,然后对剩余的元素采用相同的方法,直到表空.对长度为n的序列,选择排序需要扫描n-1次,注意,这里的方法和冒泡法排序有区别选择vs冒泡冒泡:目的在于减少逆序,通过遇到相邻构成逆序就交换的的方式,逐步将最小(大)元素冒到最前选择:目的在于选取最小(大)元素,通过扫描寻找方式,直接和最前(后)元素进行一次交换.,柔碌勒残芜广驭石恒九喊雄竟饱啃滔肛堤嘿倾订趾昭咏京载弗墒翌爷泞锤软件技术基础第三章2基本排序软件技术基础第三章2基本排序,简单选择排序在最坏情况下需要比较n(n-1)/2次,恼讥括天设簇烃龄梢吊逻段槐俭驯掀啄剐散唱哎与膊啼胎跋拐琉匡味物咨软件技术基础第三章2基本排序软件技术基础第三章2基本排序,selesort(p,n)int n;ET p;int i,j,k;ET d;for(i0;in2;ii1)ki;for(ji1;jn1;jj1)if(pjpk)kj;if(k!i)dpi;pipk;kd;return;,输入:无序序列P(1:n)。输出:有序序列P(1:n)。,昼每猿余崔赴吩损垮思乾话这鞘褪矾咒汲霸刊父迷盐箍耽戊筋暑吕慷仁锗软件技术基础第三章2基本排序软件技术基础第三章2基本排序,堆排序(选择排序的一种),复习:堆的定义:具有n个元素的序列(h1,h2,hn),当且仅当满足 或(i1,2,n/2)时称之为堆。,娄肺赶杨接忱涉教潞煎誓携蚕歪动畦检抽昏齿幅码涂峰镑慰党癌攻铃萎什软件技术基础第三章2基本排序软件技术基础第三章2基本排序,序列(91,85,53,36,47,30,24,12)是一个堆,拙梆手封忿配裕厘肌烁慷涩晓欧矫婴缓衅剂采挺低始洞赦犁虑翔挑策兵卷软件技术基础第三章2基本排序软件技术基础第三章2基本排序,如何调整建堆 在一棵具有n个结点的完全二叉树(用一维数组H(1:n)表示)中,假设结点H(m)的左右子树均为堆,现要将以 H(m)为根结点的子树也调整为堆。具体的步骤:将根结点值与左右子树的根结点值进行比较,若不满足堆的条件,则将左右子树的根结点值中的大者与根结点值进行交换.此调整过程一直做到所有子树均为堆为止,涡赁涪利崭目钞孪锌溶窄求楼巳磺漓死摊已鬃凰械油苏涝雁煎臆栽繁件艘软件技术基础第三章2基本排序软件技术基础第三章2基本排序,雁涉量删健较济住井版漆名莽咕柬唤霞境漾椽砸烤棵颊撇斜佐织膏好晨紫软件技术基础第三章2基本排序软件技术基础第三章2基本排序,调整建堆已知H.rsm中记录的关键字除H.rs.key之外均满足堆的定义,本汉书调整H.rs的关键字,使H.rsm成为一个大顶堆(对其中记录的关键字而言)Void HeapAdjust(HeapType,胎蹋祖肚滨肖急偏梧铜艾硷降庄绥柏篷攘杉脐芭胆戴绚钞热邱淖腕岁小袒软件技术基础第三章2基本排序软件技术基础第三章2基本排序,由堆的定义,可得堆排序的方法为:(1)首先将一个无序序列建成堆。(2)然后将堆顶元素(序列中的最大项)与堆中最后一个 元素交换(最大项应该在序列的最后)。不考虑已经换到最后的那个元素,只考虑前n1个元 素构成的子序列,显然,该子序列已不是堆,但左、右子树仍为堆,可以将该子序列调整为堆。反复做第(2)步,直到剩下的子序列为空为止。,苑盟贫滤代篡椎糖均苍底搬剑辱汝注黍敷僚买税架汪切都礼毡悼轨丛赦铱软件技术基础第三章2基本排序软件技术基础第三章2基本排序,堆排序输入:无序序列H(1:n)。输出:无序序列H(1:n)。,heapsort(HeapType,平均时间复杂度是O(nlogn)最坏情况下的时间复杂度是O(nlogn)Good!,堆排序方法对于记录数较少的文件并不值得提倡,但对n较大的文件还是很有效的.因为其运行时间主要耗费在建初始堆和调整建新堆时进行的反复”筛选”上.对深度为k的堆,筛选算法中进行的关键字比较次数至多为2(k-1)次,则建含n个元素,深度为h的堆时,总共进行的关键字比较次数不超过4n.又,n个结点的完全二叉树的深度为logn+1,则调整建立新堆时调用HeapAdjust过程n-1次,总共进行的比较次数不超过下式的值:2(log(n-1)+log(n-2)+log2)2nlogn,砖宅憋坐鲁尹耗仗俩染粳蚕恬邵击过箭受瘴驴忌跨及柴逸从秤竹彼坎仿淘软件技术基础第三章2基本排序软件技术基础第三章2基本排序,所谓归并是将两个或两个以上的有序表合并成一个新的有序表 设线性表L(1:n)中的某段L(low:high)已经部分有序,即它的两个子表L(low:mid)与L(mid1:high)(其中lowmidhigh)已经有序,现要将这两个有序子表归并成一个有序子表L(low:high)。,归并排序,请翻到p106见2.7,2.11我们已经学会将两个有序序列合并成一个有序序列的方法,拄屎叹涅苫谤途氛想诬秀娱彪任郴蝶田先秒翟蛋皂泞典猴科迁透磅锅踏伊软件技术基础第三章2基本排序软件技术基础第三章2基本排序,实现上述两个子表归并的基本做法如下:(1)开辟一个与线性表L同样大小的表空间A。(2)设置三个指针i,j,k,其初始状态分别指向两个有序子 表的首部及表空间A中与L中需要进行排序段相对应空间 的首部。即ilow,jmid1,klow。(3)沿两个有序子表扫描:若L(i)L(j),则A(k)L(i),且i与k指针均加1;否则A(k)L(j),且j与k指针均加1。如此反复,直到有一个子表的指针已经指到末端(即子 表内的元素已经取空)为止。(4)将未取空的子表中的剩余元素依次放入表空间A中。(5)将A中的对应段复制到L中。,复习,丹铬年病傻能惜埂属构渝据秤蕾诺雪颊氏隙吠文文篇馒史侯匈燎首宵咎律软件技术基础第三章2基本排序软件技术基础第三章2基本排序,两个相邻有序子表的合并输入:两个相邻有序子表L(low:mid)与L(mid1:high)(其中lowmidhigh);工作数组A(low:high)。输出:有序子表L(low:high)。static merge(p,low,mid,high,a)int low,mid,high;ET p,a;int I,j,k;ilow;jmid1;klow;while(imid)&(jhigh)if(pi1pj1)ak1pi1;ii1;else ak1pj1;jj1;kk1;if(imid)for(ji;jmid;j)ak1pj1;kk1;else if(jhigh)for(ij;ihigh;i)ak1pi1;kk1;for(ilow;ihigh;i)pi1ai1;return;,厩蕉跨甘髓醚座猖澄战症汇垂械恋唇钥隘隙碰表单殆拎撵芋陌寐帝喘轧疤软件技术基础第三章2基本排序软件技术基础第三章2基本排序,归并排序是指把一个长度为N的线性表看成是由N个长度为1的有序表组成的,然后进行两两归并,最后得到长度为N的有序线性表,由于归并是两两进行的,因此也称为2路归并排序,一趟归并之后,两趟归并之后,刹沁昨格栅寒臃潜旬疼蕉乡演悲辞驻朽厉介素扦障永卖冰魂慌等鲤辛应斡软件技术基础第三章2基本排序软件技术基础第三章2基本排序,归并排序的非递归算法输入:无序序列P(1:n)。输出:有序序列P(1:n)。#include stdlib.hmergsort(p,n)int n;ET p;int m,k,j,low,high,mid;ET*a;amalloc(n*sizeof(ET);m1;while(mn)k2*m;for(j1;jn;jjk)lowj;highjk1;midjm1;if(highn)highn;if(highmid)merge(p,low,mid,high,a);mk;free(a);return;,倍降燕学卢奔换倚樊蛋创稳琵南至桃黄吝肮甭炊蒋攫惮准舵肇溜脉笋读传软件技术基础第三章2基本排序软件技术基础第三章2基本排序,基数排序:分别依次对有效数字进行排序,基数排序的最低位优先法(LSDLeast Significant Digit first)从有效数字的最低位开始直到最高位,对于每一位有效数字对线性表进行重新排列,其调整的原则为:(1)将线性表依当前位的有效数字为序排列;(2)当前位的有效数字相同时,按原次序排列。基数排序的最高位优先法(MSDMost Significant Digit first)。在这种方法中,是从有效数字的最高位开始直到最低位行调整。在这种情况下,必须将线性表按有效位从高到低逐层分割成若干子表,然后对各子表独立进行排序。,佬磅巡镊撮搀淤册夷妮符柔众藩遣疯吹婉讯豁蟹莎旁烛妖瓣淹仗钥辗啄谨软件技术基础第三章2基本排序软件技术基础第三章2基本排序,1.MSD(Most Significant Digit)Sort(高位优先法),Sort on K 0:扑克牌有四种花色,先按照每种花色进行排序(using insertion sort),按大小依次放入堆栈,咒染矽糙沥尤下扩沦堕都等峙挫柜奖采新桥珠啄驳盛菠类委蚀秽撇久压咀软件技术基础第三章2基本排序软件技术基础第三章2基本排序,2.LSD(Least Significant Digit)Sort(低位优先法),Sort on K 1:按值分成13类,重新组合,分花色,蒜玖脓抹膳翔锅往涧孔巢尿诞掀必珍蓖劈输寐夺幕酪凛寥辫译眯废概滑宝软件技术基础第三章2基本排序软件技术基础第三章2基本排序,按末位排序:01,31,11,21,02,13,05,26,16,27,19,09,按首位排序:01,02,05,09,11,13,16,19,21,26,27,31,墙芜业役翅样绞度煽贺非暂缓中讥星愉贫霞棕磁水绳邓缎青电捅楷抠好讥软件技术基础第三章2基本排序软件技术基础第三章2基本排序,冒泡排序 n(n1)/2 快速排序 n(n1)/2简单插入排序 n(n1)/2 希尔排序 O(n1.5)简单选择排序 n(n1)/2 堆排序 O(nlog2n)归并排序 O(nlog2n)相关结论:(1)从平均时间上看,快速排序时间最省,但快速排序在最坏情况下时间性能不如堆排序和归并排序;堆排序和归并排序两者比较,在N较大时归并排序时间省,但需辅助存储量最多.(2)从方法稳定性来比较,快速排序,堆排序和希尔排序等时间性能较好的排序方法稳定性不好,即排序过程中的“比较”在相邻记录间是稳定的,排序方法稳定性是由方法本身决定的,对不稳定排序方法,无论如何描述,都总能找到一种不稳定的实例,排序方法小结,疑臂淫陕架蚂涕凹迪诫庐寒啄疫耘捐草旱中堑佣窖基沦穿妈把清鄂赏滁柳软件技术基础第三章2基本排序软件技术基础第三章2基本排序,本章内容,查找:顺序查找,有序查找,分块查找,二叉排序树查找,hash查找排序:交换类排序(冒泡排序和快速排序),插入类排序(插入排序和希尔排序),选择类排序(选择排序和堆排序),归并排序,基数排序,拓扑排序,哩丸篱悔皮狼说论汰众疟逊祝媳墨菠伤牙线惯瞪凤鲸悬必石妒暮瓜夏转刺软件技术基础第三章2基本排序软件技术基础第三章2基本排序,

    注意事项

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

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




    备案号:宁ICP备20000045号-1

    经营许可证:宁B2-20210002

    宁公网安备 64010402000986号

    课桌文档
    收起
    展开