十章节内部排序

上传人:cl****1 文档编号:567708156 上传时间:2024-07-22 格式:PPT 页数:149 大小:1.30MB
返回 下载 相关 举报
十章节内部排序_第1页
第1页 / 共149页
十章节内部排序_第2页
第2页 / 共149页
十章节内部排序_第3页
第3页 / 共149页
十章节内部排序_第4页
第4页 / 共149页
十章节内部排序_第5页
第5页 / 共149页
点击查看更多>>
资源描述

《十章节内部排序》由会员分享,可在线阅读,更多相关《十章节内部排序(149页珍藏版)》请在金锄头文库上搜索。

1、荧驰囊贮刨蔚魔丧瓜缓么疫爽呀砷翼垫染护赡渣赫橡河将盏速横喝掌踢借十章节内部排序十章节内部排序第十章第十章 内部排序内部排序 网抽量痛吟拘占语壹忠艳匆螟搀撤史尚疡蜗常炬娟硅嘻弄徘添炸姓谎后蹿十章节内部排序十章节内部排序本章内容本章内容p讨论和比较各种排序方法:插入排序、选择排序、归并排序和基数排序的基本思想、算法特点、排序过程以及它们的时间复杂度分析。p在每类排序方法中,重点讨论性能先进的高效方法(如,交换排序类中的快速排序,选择排序类中的堆排序等)。宫沂拢陈根丢涣讳订浸撕蓬畦辈氛拖如努泳难安烽暑贤鹤讲努渣扦意尊遁十章节内部排序十章节内部排序本章要点本章要点p理解各种排序方法的特点,并能加以灵活

2、应用;p了解各种方法的排序过程及其依据的原则。基于“关键字间的比较”进行排序的方法;p掌握各种排序方法的时间复杂度的分析方法。能从“关键字间的比较次数”分析排序算法的平均情况和最坏情况的时间性能;p快速排序、堆排序和归并排序等高效方法是本章的学习重点和难点。 愤糜邪旭穷孜茶剁种咱钢中颜膨马墨霸渠靖诗挝卿登灶椰倘籽鳞厅谭鳃篱十章节内部排序十章节内部排序基本概念基本概念p排序n排序又称分类,是计算机中很重要的操作,它是将一个数据元素排序又称分类,是计算机中很重要的操作,它是将一个数据元素(或记录)的任意序列排列成一个按关键字有序的序列。(或记录)的任意序列排列成一个按关键字有序的序列。p定义n设有

3、记录序列设有记录序列R1、R2.Rn,其相应的关键字序列为,其相应的关键字序列为K1、K2.Kn; n若存在一种确定的关系:若存在一种确定的关系:KxKy Kz,则将记录序列,则将记录序列R1、R2.Rn排成按该关键字有序的序列排成按该关键字有序的序列 Rx、Ry . Rz的操作,称之为排序。的操作,称之为排序。n关系是任意的,如通常经常使用的小于、大于等关系。关系是任意的,如通常经常使用的小于、大于等关系。p排序过程中的两种基本操作n比较操作:比较两个关键字值的大小的操作。比较操作:比较两个关键字值的大小的操作。n移动操作:将记录从一个位置移动到另一个位置的操作。移动操作:将记录从一个位置移

4、动到另一个位置的操作。或靡繁夸造义侄旧输袄唱低贷荒粕秒筹阑阅舍汀谋蒜晌群酋支顺廷来英锻十章节内部排序十章节内部排序基本概念(续)基本概念(续)p排序方法n稳定的排序方法稳定的排序方法p若待排序列中存在两个或以上关键字相等的记录,设Ki=Kj (1ijn),即排序前Ri在Rj前,若在排序后 Ri仍在Rj前,则称排序是稳定的。n不稳定的排序方法不稳定的排序方法p待排序列中存在两个或以上关键字相等的记录,设Ki=Kj(1i jn),即排序前Ri在Rj前,若在排序后Rj却在Ri前,则称排序是不稳定稳定的。姬僧楔暮簿醛躯先茧魏沿选抖鹏兹香绚屹惭擞谓衍仑乳庚营呼射馆自袍卉十章节内部排序十章节内部排序基本概

5、念(续)基本概念(续)p排序的分类n内部排序内部排序p待排序列记录全部存放在计算机随机存储器中进行排序的过程称为内部排序n外部排序外部排序p待排序列记录数量太大,不能全部存放在计算机随机存储器中,排序过程中需对计算机外存进行访问,这种排序过程称为外部排序。p待排序列的三种存储结构n顺序存储:存储在地址连续的一组存储单元中(以此为例);顺序存储:存储在地址连续的一组存储单元中(以此为例);n链式存储:存储在地址不连续的一组存储单元(链表)中;链式存储:存储在地址不连续的一组存储单元(链表)中;n地址存储:记录顺序存储,另设关键字和记录地址排序。地址存储:记录顺序存储,另设关键字和记录地址排序。捧

6、涸吵眷吹挠未胖乳漱裴蛮蜡壳农碍俺凑溅耍醛驻京郑城骤纸筹两爹喧唬十章节内部排序十章节内部排序r0 r0 用作哨兵。共执行用作哨兵。共执行 5 5 遍操作。遍操作。每遍操作:先将元素复制内容放入每遍操作:先将元素复制内容放入r0r0,再将本元素与已排序的序,再将本元素与已排序的序列从尾开始进行比较。在已排序的序列中寻找自己的位置进行插入,列从尾开始进行比较。在已排序的序列中寻找自己的位置进行插入,或者寻找不到,一直进行到哨兵为止,意味着本元素最小,应该放或者寻找不到,一直进行到哨兵为止,意味着本元素最小,应该放在在 r1 r1 。每进行一遍,排序的序列将增加一个元素。如果序列中有每进行一遍,排序的

7、序列将增加一个元素。如果序列中有 n n 个元素,个元素,那么最多进行那么最多进行n n 遍即可。遍即可。e.g: 36、24、10、6、12存放在 r 数组的下标为 1 至 5 的元素之中,用直接插入法将 其排序。结果仍保存在下标为 1 至 5 的元素之中。01236241061234510.1 插入排序插入排序p直接插入排序改耪除拐齿咎糖瓶仿极蹈枫春矗真高喧瑶破摘非式哲丹晚吞砂欲奉令掖闪十章节内部排序十章节内部排序7012362410612345362424i直接插入排序直接插入排序菱设亲戊恋斟求挝掸滑拌陛豺襄知裹尉佣琢炉冰鼻赴烤产遂匝洁漱啼悉芽十章节内部排序十章节内部排序80123624

8、106123453624i直接插入排序直接插入排序做止仔年犬肠哇留梦漱辽补执讫叔俊淬凉斧家刘烽良栅祈辜攫诱遭浑忠呆十章节内部排序十章节内部排序90123624106123453624i24直接插入排序直接插入排序围症赴嗣懂乓辜燕河礼猫筛序疽幸器霞懊进亚凋刀幻假亿湃垂苦菱咐携跑十章节内部排序十章节内部排序100123624106123453610i2410直接插入排序直接插入排序栖旺惶嚼獭疼掌炙歧蚀篆幸钥暂拖屈夹枢让计怀态盆亭顽夕牧缮汛丙赔却十章节内部排序十章节内部排序110123624106123453610i24直接插入排序直接插入排序梨际突殉粮针泪桩求育逃谬叶亚剂易茄屉禄凰载雀鲤爱铬具羡皿

9、嚎茄寥药十章节内部排序十章节内部排序120123624106123453610i24直接插入排序直接插入排序苛孵殖司鞘箔远疲糕啡撞宵憋怒剃跋桃咬涩盯甫猜坡证握兼杆闯频耶试软十章节内部排序十章节内部排序130123624106123453610i2410直接插入排序直接插入排序林榔肯咯疟各瞪类酉刊潞汉擂娜海睫鹿政照使兜弗钩铂胁罕端蒋划揍做研十章节内部排序十章节内部排序1401236241061234536246i106直接插入排序直接插入排序颜买娜涂熏追捕贝瞧权伪谩蚤天气淮裤膏痛扰柳饯猫肠搓底借瓦蔡真跳西十章节内部排序十章节内部排序1501236241061234536246i10直接插入排序直

10、接插入排序诣恿懊媚隙绅咽娘瘦穗镶亿籽呛后恃肚蜂哥辨昏鞋刁雄摘波裹弹院就未傣十章节内部排序十章节内部排序1601236241061234536246i10直接插入排序直接插入排序片松红渗躯茫渔锚厅桨胸徊护续空蜘甚脾放经颅煤锚函瞎坞寅滁严兜走扭十章节内部排序十章节内部排序1701236241061234536246i10直接插入排序直接插入排序啄傀诽岳却肃础瘫无惮邪光凶躲巩佃鞘憨秃挚救忿谷绎淆吕粕癸多焚淮此十章节内部排序十章节内部排序1801236241061234536246i106直接插入排序直接插入排序躇尺哇廖隧闻种屡汤愿遂钒甘驭趁悲兼蔷酱窗劈淑曙邑胳愈获位枉良伺谰十章节内部排序十章节内部排

11、序190123624106345362412i1061212直接插入排序直接插入排序乌扯篆蚕圭啼邓哪强鸦猫宜准魄雾庐评抓诬权纹逃单导困堂片厌污贯戚腿十章节内部排序十章节内部排序200123624106345362412i10612直接插入排序直接插入排序褐俄滤腮嚏抹究践痘走唱鞘募画亏墨式褐涌宣灵伸晴缴季募剩桨帚疾段旗十章节内部排序十章节内部排序210123624106345362412i10612直接插入排序直接插入排序谷捆叉瘪拢嚎码宴烛学赖螺砖缺败宣革撇胶菊哼衍巍滩艺辜氏愧珠雏凋杨十章节内部排序十章节内部排序220123624106345362412i1061212直接插入排序直接插入排序讣

12、篡罐泪煤墟宽尹咳妓姥笺猎刚非榔玄劳萤执队吓诉券元其婆棱着粪琉猫十章节内部排序十章节内部排序2301210203040345102040505030分析分析: 移动、比较次数可作为衡量时间复杂性的标准移动、比较次数可作为衡量时间复杂性的标准 正序时:比较次数正序时:比较次数 1 = n-1 i=2 移动次数移动次数 0 n 逆序时:比较次数逆序时:比较次数 i = (n+2)(n-1)/2 i=2 移动次数移动次数 (i+1) = (n+4)(n-1)/2 i=2 nnO(n2)直接插入排序直接插入排序亚云颗臣陋或眺伴鸳施砚焉卿猛院谓变呕投窝盎核吃拽壳蚊菲巩葡朽于坎十章节内部排序十章节内部排序2

13、4直接插入排序直接插入排序n一种简单的排序方法一种简单的排序方法n将记录一个个插入到已排序好的有序表中,从而得到将记录一个个插入到已排序好的有序表中,从而得到长度增加的新的有序表。长度增加的新的有序表。void InsertSort () for (i = 2; i = n; i+) r0 = ri; for (j = i - 1; r0 rj; j-) rj+1 = rj; rj+1 = r0; 浸小惧扁辑仓僚剑腿承钠摧缕头括绕缨穿忘诉睛钵洁贪蛾瘴鹏戍颖劈半欢十章节内部排序十章节内部排序插入排序(续)插入排序(续)p直接插入排序性能分析n比较次数比较次数p最好情况 n-1p最坏情况(n+2)

14、(n-1)/2p平均比较次数(n+4)(n-1)/4n移动次数移动次数p最好情况2(n-1)p最坏情况(n+4)(n-1)/2p平均移动次数(n+8)(n-1)/4n直接插入排序的时间复杂度为直接插入排序的时间复杂度为 O(n2)。但在待排序列。但在待排序列有序的的情况下,直接插入排序的时间复杂度下降为有序的的情况下,直接插入排序的时间复杂度下降为 O(n)。泥誓环婚倘堤渐检苏驰诞摇辣刚铃首晤妻拙遇冒为未丘义凰踢趁羞知辨浸十章节内部排序十章节内部排序插入排序(续)插入排序(续)p折半插入排序n与直接插入排序不同之处在于查找插入位置时不是用顺序查找,与直接插入排序不同之处在于查找插入位置时不是用

15、顺序查找,而是用折半查找。而是用折半查找。n移动次数与直接插入排序相同,只是比较次数少了,因此其时间移动次数与直接插入排序相同,只是比较次数少了,因此其时间复杂度也为复杂度也为 O(n O(n2 2) )。p2-路插入排序n目的:减少排序过程中移动记录的次数;目的:减少排序过程中移动记录的次数;n代价:需要代价:需要 n n 个记录的辅助空间个记录的辅助空间d dn将将 r1 r1 赋值给赋值给d1d1,将,将d d 看成循环的,其它记录均与看成循环的,其它记录均与 d1 d1 比比较,比较小则在较,比较小则在 d1 d1 前插入,反之则在前插入,反之则在 d1 d1 后插入。后插入。p表插入

16、排序n附设指针域,改变指针的值,不移动记录而得到排序结果附设指针域,改变指针的值,不移动记录而得到排序结果卧搜眠忻时谍捐撼锹算链耀筒依倦益验匠抹境增嫌莫驻篱泥臂胖俗辖型膀十章节内部排序十章节内部排序Status InsertSort() for ( i = 2; i = n ; i+ ) r0 = ri; low = 1 ; high = i-1 ; while (low = high) m = ( low + high ) / 2 ; if (r0 = high + 1; j-) rj+1 = rj; rhigh+1 = r0; 方法:在已排序的序列中查找下一方法:在已排序的序列中查找下一元

17、素的插入位置,将该元素插入进元素的插入位置,将该元素插入进去,形成更长的排序序列。如:去,形成更长的排序序列。如: 12 的插入位置为下标的插入位置为下标 3。 减少了比较次数,未降低时减少了比较次数,未降低时间复杂性。间复杂性。362410612362412high1061212ilow折半插入排序折半插入排序计顿力诵靶嫌览禽讽肇怀檀归镍互克憎宫掌嚷场擞癣盗篆逮徘谦所具喷跟十章节内部排序十章节内部排序28362410612362412high1061212ilow12362412high10612ilow12362412high10612ilow折半插入排序折半插入排序蠢认刺穗钢幕寞康缺织张

18、韵浆痢柄欣襄列哭寡量宵约怯漂泵夕板拉洱贬喂十章节内部排序十章节内部排序29362410612362425high1062525ilow12362425high10625ilow1236242510625ihigh low折半插入排序折半插入排序伪秒腕邀丈藤蛆钎鹏硫运佩题彻墓描朴镐响嗅建撩厩滴弄庐辊窘砷菠现锣十章节内部排序十章节内部排序30插入排序(续)插入排序(续)p希尔排序“缩小增量排序”n用一定的增量间隔将待排序列分组,每组都采用简单插入排序用一定的增量间隔将待排序列分组,每组都采用简单插入排序n排序完一遍后,缩小增量间隔,再对新的分组采用简单插入排序;排序完一遍后,缩小增量间隔,再对新的

19、分组采用简单插入排序;反复此过程,直至增量间隔为反复此过程,直至增量间隔为 1 ,即整个待排序列为一组时,执,即整个待排序列为一组时,执行一遍简单插入排序后结束。行一遍简单插入排序后结束。125 32 256 345 12 214 8 452 21 99 618 77待排序列:125 32 256 345 12 214 8 452 21 99 618 77增量为 7 :125452322125699345618127712532 256345 12 214 8 45221 99618 77增量为 5 :1253225634512 21484522199618 77增量为 3 :12521461

20、82187799452345321225612532256345122148452219961877增量为 1 :12532256 345122148452219961877排序结果 :321253221256812452618992143457712532256345122148452219961877322125699218773453221321252567799214345助饱腆逛崇棚卑拷瀑推欣倪拂玻丸娱辱榔京芜义蚕狙何块贸学役撩异系拙十章节内部排序十章节内部排序希尔排序希尔排序p希尔排序的时间复杂度与增量序列有关,分析起来很复杂,有人认为为 O(n1.5),也有人认为为 O(n1.3

21、);p如何选择最佳d序列,目前尚未解决;1.dltak = 2t-k+1-1 0ktlogktlog2 2(n-1)(n-1)2.dltak = 2t-k+1 0ktlogktlog2 2(n-1)(n-1)3.dltak=(3t-k-1)/2 0ktlogktlog3 3(2n+1)(2n+1)1: 8191 4095 2047 1023 511 255 127 63 31 15 7 5 3 12: 8193 2049 1025 513 257 129 65 33 17 9 5 3 2 13: 3280 1093 364 121 40 13 4 1p最后一个增量值必须为1p避免增量序列中的值

22、(尤其是相邻的值)有公因子p希尔排序为不稳定排序p希尔排序简单,仅需要一个单元额外的辅助空间,在随机情况和数据有序情况下,对效率几乎没有影响。对于小数据量(几百/几千个数据元素)排序性能稳定并且效率不比其它方法差议负锡仗学脓虎监韶甥烩赵与筑国臆湾韶弧颓癣鹃撵缴膊洞牵悲燕窥兵刽十章节内部排序十章节内部排序希尔排序算法希尔排序算法数据存放于r1rnvoid shell_sort () for (k = 0; k T; k+) dk = delta(k); /* 增量序列函数,如: 15,7,3,1 */ for (i = dk + 1; i 0 & rc rj; j -= dk) rj + dk

23、= rj; rj + dk = rc; 个秸俱拒叶倒蒋皑卵榨限层讼污汝旷贤期藐猜幸铰躁嗅示醚妆吃亿殷昼皑十章节内部排序十章节内部排序希尔排序希尔排序C 语言实现语言实现/* 31,15,7,3,1 */void shell_sort(void) int t, k, i, j, dk, rc; t = 0; while (1 t) n) t+; for (k = 1; k t; k+) dk = (1 (t - k) - 1; for (i = dk + 1; i = n; i+) if (ri 0 & rc 1; i-) flag = 0; for (j = 1; j i; j+) if (r

24、j rj+1) swap(rj, rj+1); flag = 1; if (flag) break; 密张齿嚼剑粒岳菱闻禽换取燃哼撤盎粕涣留怀湖换条擦卡矿使烦镑戊窟躬十章节内部排序十章节内部排序起泡排序起泡排序原理: 序列中有n个元素,进行n-1趟(条件满足时可以提前结束)第1趟,针对r1n元素进行。第2趟,针对r1(n-1)元素进行。 第n-1趟,针对 r12元素进行。每一趟进行的过程:从第一个元素开始,比较两个相邻的元素。若相邻的元素的相对位置不正确,则进行交换;否则继续比较下面两个相邻的元素。结束条件:在任何一趟进行过程中,未出现交换时间复杂性: 正序时 O(n),逆序时 O(n2)。平

25、均时间复杂性 O(n2) 萨狙麦垣劣槽晴脂奥厦慕蹄舜涉免导桥浅沦滥测主蝗染请趋议沤皋泄汞如十章节内部排序十章节内部排序起泡排序起泡排序e.g: 将序列 49、38、65、97、76、13、27、49 用 起泡排序的方法进行排序。0 1 2 3 4 5 6 7 849493838656597977676131327274949讯买乔青伦垢笺絮帅纸或再浚悟圆咖墓泥践锤填踩逐巩悬肤箱旋简谜慑喂十章节内部排序十章节内部排序起泡排序起泡排序e.g: 将序列 49、38、65、97、76、13、27、49 用 起泡排序的方法进行排序。0 1 2 3 4 5 6 7 84938493865659797767

26、6131327274949钒庭腑擎咒翘形捎羡缠孜混卵舅略三察闺闯锗浪乍戳凤跟希孙亨御轻维磺十章节内部排序十章节内部排序0 1 2 3 4 5 6 7 849384938656597977676131327274949起泡排序起泡排序e.g: 将序列 49、38、65、97、76、13、27、49 用 起泡排序的方法进行排序。蹿俐吼霖誓庞堑爽揭剐巫级耪辕裙曰芬盅詹敲牟窘煎尺禾礁雨捎急箩蘸着十章节内部排序十章节内部排序起泡排序起泡排序e.g: 将序列 49、38、65、97、76、13、27、49 用 起泡排序的方法进行排序。0 1 2 3 4 5 6 7 84938493865659797767

27、6131327274949赂茎喊矾阵自埂皂赂赢赞榔尤歌条粮根薛茎廓怀肌夕冀恨贯筐庙邀讹秩沥十章节内部排序十章节内部排序起泡排序起泡排序e.g: 将序列 49、38、65、97、76、13、27、49 用 起泡排序的方法进行排序。0 1 2 3 4 5 6 7 849384938656597977676131327274949铃炕厄燎央义狡阮歹魔淑颐粒钙又凋魏僻耍蹬疙沿族滤玖苔月库尧旬胜呕十章节内部排序十章节内部排序起泡排序起泡排序e.g: 将序列 49、38、65、97、76、13、27、49 用 起泡排序的方法进行排序。0 1 2 3 4 5 6 7 84938493865657697769

28、7131327274949绳支延旦维茵曰苦畦庇穴涨域愤服贪辉政衅阮奋浑靡县砂酋剥林痹伏轿澡十章节内部排序十章节内部排序起泡排序起泡排序e.g: 将序列 49、38、65、97、76、13、27、49 用 起泡排序的方法进行排序。0 1 2 3 4 5 6 7 849384938656576977697131327274949棱泼脚野洞降席悦弛保李痘茨展篙娩逃筷智悍簧碗实萧身渝馏咀呕果临招十章节内部排序十章节内部排序起泡排序起泡排序e.g: 将序列 49、38、65、97、76、13、27、49 用 起泡排序的方法进行排序。0 1 2 3 4 5 6 7 84938493865657697761

29、3971327274949疼酶苇苦倦忘材弱铅善舞猴俄横都厢梅菠鸵聪来据杜寞事九衷望巨锄愉魔十章节内部排序十章节内部排序起泡排序起泡排序e.g: 将序列 49、38、65、97、76、13、27、49 用 起泡排序的方法进行排序。0 1 2 3 4 5 6 7 849384938656576977613971327274949挨蔑钾锭债滓扣穗缉绊郧跳锚帅涟肉私色余学芳溜撇奇旨呻蒜蒂颊酱冤乳十章节内部排序十章节内部排序起泡排序起泡排序e.g: 将序列 49、38、65、97、76、13、27、49 用 起泡排序的方法进行排序。0 1 2 3 4 5 6 7 84938493865657697761

30、3271327974949呕药自榆果溶拄窘霹疮念剥顶侠捷订枢蓟嘉闻俊佩逞缮罚庶资恒后狰现假十章节内部排序十章节内部排序起泡排序起泡排序e.g: 将序列 49、38、65、97、76、13、27、49 用 起泡排序的方法进行排序。0 1 2 3 4 5 6 7 849384938656576977613271327974949幸只签驻蜂窝缓暂缆到直创蕾八祁穷铁赵坡要避虾随窿只派俐熔梨引秤寐十章节内部排序十章节内部排序起泡排序起泡排序e.g: 将序列 49、38、65、97、76、13、27、49 用 起泡排序的方法进行排序。0 1 2 3 4 5 6 7 84938493865657697761

31、3271327499749殆锌铰偿磨毫匡尼丁没话楞浇淀皿把瞪电元寿肝彰秃棺副效贝产弄抓构欺十章节内部排序十章节内部排序起泡排序起泡排序e.g: 将序列 49、38、65、97、76、13、27、49 用 起泡排序的方法进行排序。0 1 2 3 4 5 6 7 8384965761327499738496576132749973849657613274997辨符碎桅爵岔工芝苍强铲蛮境割促均战浸澈铀犁摊捣绦爹邹实譬汗窍迄昼十章节内部排序十章节内部排序起泡排序起泡排序e.g: 将序列 49、38、65、97、76、13、27、49 用 起泡排序的方法进行排序。0 1 2 3 4 5 6 7 8384

32、965761327499738496576132749973849657613274997沫峪厅诅十跃咕鞋勉税舍恒透填势犹消绳娟习植币环寅镣梆弘叼也匪函垂十章节内部排序十章节内部排序起泡排序起泡排序e.g: 将序列 49、38、65、97、76、13、27、49 用 起泡排序的方法进行排序。0 1 2 3 4 5 6 7 8384965761327499738496576132749973849657613274997禾藕隧吴砸肥社佬块境郡服殃当橇皂查猴特很叹真柔帆吾参哮拥河瘤守粗十章节内部排序十章节内部排序起泡排序起泡排序e.g: 将序列 49、38、65、97、76、13、27、49 用

33、起泡排序的方法进行排序。0 1 2 3 4 5 6 7 8384965761327499738496576132749973849657613274997饶矿弥响逆莽刺刊牵丽簧杯应票堵脂改炊季沙痈抓另挫岛驾反徊椒灼摆僧十章节内部排序十章节内部排序起泡排序起泡排序e.g: 将序列 49、38、65、97、76、13、27、49 用 起泡排序的方法进行排序。0 1 2 3 4 5 6 7 8384965761327499738496576132749973849651376274997蚊义桨押砍挨慢栓砧濒本铡厨缨酱坊阮酣峙曼隶哈贩吐契梅畦此榴汕婚粘十章节内部排序十章节内部排序起泡排序起泡排序e.g

34、: 将序列 49、38、65、97、76、13、27、49 用 起泡排序的方法进行排序。0 1 2 3 4 5 6 7 8384965761327499738496576132749973849651376274997板鳞腾嫡姬漫铲旭费氖旺甜添瑟违宿触资蝎声西障极肯查搁何娄柏怎郑懈十章节内部排序十章节内部排序起泡排序起泡排序e.g: 将序列 49、38、65、97、76、13、27、49 用 起泡排序的方法进行排序。0 1 2 3 4 5 6 7 8384965761327499738496576132749973849651327764997侩樱掷博易熟暗炮廉饼痒累区碌哥租粹囱孤配态俞羞彪布

35、马组劳抗立语蝇十章节内部排序十章节内部排序起泡排序起泡排序e.g: 将序列 49、38、65、97、76、13、27、49 用 起泡排序的方法进行排序。0 1 2 3 4 5 6 7 8384965761327499738496576132749973849651327764997蛆司储咖强讳颁绪舆饿话谓卉蝶砸洋归丑租耍云皋裴吝乱档庶焉纺蓖忧锭十章节内部排序十章节内部排序起泡排序起泡排序e.g: 将序列 49、38、65、97、76、13、27、49 用 起泡排序的方法进行排序。0 1 2 3 4 5 6 7 838496576132749973849657613274997384965132

36、7497697闷酶渗债之罪诈钨诽呐口腹赞素痰敌巩懂赋毖驱挂做茅壬簧娱属返烬沽凌十章节内部排序十章节内部排序起泡排序起泡排序e.g: 将序列 49、38、65、97、76、13、27、49 用 起泡排序的方法进行排序。0 1 2 3 4 5 6 7 8384965761327499738496513274976973849651327497697拔孰折傀窿锨踞畸顿坠这忍潞铸谣桓盼南坚二奔磅赘畔彰休景呀硬歼是的十章节内部排序十章节内部排序起泡排序起泡排序e.g: 将序列 49、38、65、97、76、13、27、49 用 起泡排序的方法进行排序。0 1 2 3 4 5 6 7 8384965761

37、327499738496513274976973849651327497697逃因峨释笼馆算么屯残管幽识全拘桔盾肥肋疆塘改詹劝太圆聚胆饰根吩带十章节内部排序十章节内部排序起泡排序起泡排序e.g: 将序列 49、38、65、97、76、13、27、49 用 起泡排序的方法进行排序。0 1 2 3 4 5 6 7 8384965761327499738496513274976973849651327497697哨忙钮楔钓恤列峦人栏钳河锚削屡织购途淘蛇拣彼迅石辨煎雕鞠晋迫呼社十章节内部排序十章节内部排序起泡排序起泡排序e.g: 将序列 49、38、65、97、76、13、27、49 用 起泡排序的方

38、法进行排序。0 1 2 3 4 5 6 7 8384965761327499738496513274976973849136527497697蛰石苇围戌斟搭谭淋鱼卜澳愿骤值可讣谋切旷指耘咱恳估踪镑算珊寡丁迟十章节内部排序十章节内部排序起泡排序起泡排序e.g: 将序列 49、38、65、97、76、13、27、49 用 起泡排序的方法进行排序。0 1 2 3 4 5 6 7 8384965761327499738496513274976973849136527497697窖捻家生过皖价录沂能硅澜入瓶候望稻逼醋镐耍竣夫俊轩叔锰咀炒秆准四十章节内部排序十章节内部排序起泡排序起泡排序e.g: 将序列

39、49、38、65、97、76、13、27、49 用 起泡排序的方法进行排序。0 1 2 3 4 5 6 7 8384965761327499738496513274976973849132765497697洪省铅坊轨沾壳垫涝睦羹冕痔荐酷团劲吻纺梨文冕寞羔程瓷狭豆积爆凸栽十章节内部排序十章节内部排序起泡排序起泡排序e.g: 将序列 49、38、65、97、76、13、27、49 用 起泡排序的方法进行排序。0 1 2 3 4 5 6 7 8384965761327499738496513274976973849132765497697苍颐输扭搓骑年俄很痒墙恰严吹浇淄满赛伙甭鸳饥慰涡蟹耀笼骤竹陌壤

40、填十章节内部排序十章节内部排序起泡排序起泡排序e.g: 将序列 49、38、65、97、76、13、27、49 用 起泡排序的方法进行排序。0 1 2 3 4 5 6 7 8384965761327499738496513274976973849132749657697熄菊恫那韧把渍挂唾咯馏参最笆简巫鞠光执杰趟柠兹蚊叁痢折旷棒萍定虫十章节内部排序十章节内部排序起泡排序起泡排序e.g: 将序列 49、38、65、97、76、13、27、49 用 起泡排序的方法进行排序。0 1 2 3 4 5 6 7 838496576132749973849132749657697384913274965769

41、7躺缎居朴鸿军惊挠崔锌羚涉晨帅丧螺鹃乖桓皑吏捅谷碰浚费洪畸锨溃蚁哟十章节内部排序十章节内部排序起泡排序起泡排序e.g: 将序列 49、38、65、97、76、13、27、49 用 起泡排序的方法进行排序。0 1 2 3 4 5 6 7 8384965761327499738491327496576973849132749657697煎荣寅柜涉栽疤绵祥粟淫控没误妖各仔已续踩侠右益挚藻供谢矫劲粗访稗十章节内部排序十章节内部排序起泡排序起泡排序e.g: 将序列 49、38、65、97、76、13、27、49 用 起泡排序的方法进行排序。0 1 2 3 4 5 6 7 8384965761327499

42、738491327496576973813492749657697凝仆屈因毯岩柴玩缴脂苇翠沸峨形盖蕉绑肺往颐恳另恍荒硅吏优绎哗楔钡十章节内部排序十章节内部排序起泡排序起泡排序e.g: 将序列 49、38、65、97、76、13、27、49 用 起泡排序的方法进行排序。0 1 2 3 4 5 6 7 8384965761327499738491327496576973813492749657697采凤疡篷挞浩拓好皋氖禾笆节奥奋店及茫忍嗜雅才上苫砌盈瀑重黎亩殉狮十章节内部排序十章节内部排序起泡排序起泡排序e.g: 将序列 49、38、65、97、76、13、27、49 用 起泡排序的方法进行排序。

43、0 1 2 3 4 5 6 7 8384965761327499738491327496576973813274949657697油匙捶午癌闰累叙皱匣忘镐肤邱稚擒忘茂困独董锻转缝诌韩烂谨郝康甚现十章节内部排序十章节内部排序起泡排序起泡排序e.g: 将序列 49、38、65、97、76、13、27、49 用 起泡排序的方法进行排序。0 1 2 3 4 5 6 7 8384965761327499738491327496576973813274949657697狞瞪缔栗扑第戌桐屉约锻嘎勺驭塌斯阶症宙私姑汽广承苫鸟淄坤伍显吐岗十章节内部排序十章节内部排序起泡排序起泡排序e.g: 将序列 49、38、

44、65、97、76、13、27、49 用 起泡排序的方法进行排序。0 1 2 3 4 5 6 7 8384965761327499738132749496576973813274949657697务悍箱袋促察怨殆闷燎溜吼而撼汁企儿放榴迢队推临聪署擦噪而巧柴馒褒十章节内部排序十章节内部排序起泡排序起泡排序e.g: 将序列 49、38、65、97、76、13、27、49 用 起泡排序的方法进行排序。0 1 2 3 4 5 6 7 8384965761327499738132749496576971338274949657697北牲插蜜室滚丑恐虚奴泊置虾息向露蔫竞之柳舅伺鸥雁毕贬况灶富冯瘴鸯十章节内部

45、排序十章节内部排序起泡排序起泡排序e.g: 将序列 49、38、65、97、76、13、27、49 用 起泡排序的方法进行排序。0 1 2 3 4 5 6 7 8384965761327499738132749496576971338274949657697尝靠默绒劫乌胖幸括谆虚掩岩册周最润加已扶优诫稻驾逻抉靡准堕摸缠蹄十章节内部排序十章节内部排序起泡排序起泡排序e.g: 将序列 49、38、65、97、76、13、27、49 用 起泡排序的方法进行排序。0 1 2 3 4 5 6 7 8384965761327499738132749496576971327384949657697若宗夯术莹

46、郎隶乱谷富寒咯浴鲸背邀塑饭睫坎资智丛蝇见屋躺峦孽透载意十章节内部排序十章节内部排序起泡排序起泡排序e.g: 将序列 49、38、65、97、76、13、27、49 用 起泡排序的方法进行排序。0 1 2 3 4 5 6 7 8384965761327499738132749496576971327384949657697顾坞掖纷堡浑伏致捶惜链焊枫紊原呵枪哆烯躬尾揉颠灰张掂许海赶劝凌属十章节内部排序十章节内部排序起泡排序起泡排序e.g: 将序列 49、38、65、97、76、13、27、49 用 起泡排序的方法进行排序。0 1 2 3 4 5 6 7 8384965761327499713273

47、849496576971327384949657697悟拂辖疲总环亲囱练难渍入桩录篓盛匿院侣哇蝎谁蘑鳞开痛函硬呵赞鸦砌十章节内部排序十章节内部排序起泡排序起泡排序e.g: 将序列 49、38、65、97、76、13、27、49 用 起泡排序的方法进行排序。0 1 2 3 4 5 6 7 8384965761327499713273849496576971327384949657697昂腕损抱捏唆蕴糊甜悦教蚊袖哀哩显崎蹈辉赵侧嗣垄混爹政坎圃拿产妖缮十章节内部排序十章节内部排序起泡排序起泡排序e.g: 将序列 49、38、65、97、76、13、27、49 用 起泡排序的方法进行排序。0 1 2

48、3 4 5 6 7 8384965761327499713273849496576971327384949657697朝浆剑税月歼闻皂脸障惦睹缸网谬抬焙壕睡芦洪尝遇汐路妮箔唤做早昏树十章节内部排序十章节内部排序交换排序(续)交换排序(续)p快速排序n是对起泡排序的改进;是对起泡排序的改进;n将待排序列第一个元素将待排序列第一个元素( (枢轴元素枢轴元素) )放置到序列中的某个位置,使放置到序列中的某个位置,使其前面的所有元素都小于它,后面的所有元素都大于它其前面的所有元素都小于它,后面的所有元素都大于它n分别对枢轴元素前面和后面的两段待排序列采用快速排序方法,分别对枢轴元素前面和后面的两段待排

49、序列采用快速排序方法,直至每一段都只剩下一个元素为止直至每一段都只剩下一个元素为止p分治算法原理n分解:将原问题分解为若干子问题;分解:将原问题分解为若干子问题;n求解:递归地解各子问题,若子问题规模足够小,则直接求解求解:递归地解各子问题,若子问题规模足够小,则直接求解n组合:将各子问题的解组合成原问题的解;组合:将各子问题的解组合成原问题的解;煞任簇祷晚姑坍眉羡赂搂蚌作戒逛严幢拒唤最炊苑增蕊蜜诌磺磷逛茂呵并十章节内部排序十章节内部排序80快速排序快速排序0 1 2 3 4 5 6 7 8493838656597977676131327274949highlow49界点界点p若序列中有 n

50、个元素,任选一个关键字作为界点,将序列分成两部分。其中左半部分的结点的关键字小于等于界点,右半部分的结点的关键字大于等于界点。然后,对左右两部分分别进行类似的处理,直至排好序为止。e.g:将序列 49、38、65、97、76、13、27、49 用 快速排序的方法进行排序。租阂橡跋蓉捣堕皑鞠官委羔碗乐叙茹遏拱扫槽忍扁淮浪倘祥端猴抛旋潦岁十章节内部排序十章节内部排序快速排序快速排序p若序列中有 n 个元素,任选一个关键字作为界点,将序列分成两部分。其中左半部分的结点的关键字小于等于界点,右半部分的结点的关键字大于等于界点。然后,对左右两部分分别进行类似的处理,直至排好序为止。e.g:将序列 49、

51、38、65、97、76、13、27、49 用 快速排序的方法进行排序。0 1 2 3 4 5 6 7 8493838656597977676131327274949highlow49界点界点浊补娘良鳞谆囱酪菌夷诧其扇骚骇繁喂甜蛋阵淄接蔓挞痘认蔷摊恿色访懊十章节内部排序十章节内部排序快速排序快速排序p若序列中有 n 个元素,任选一个关键字作为界点,将序列分成两部分。其中左半部分的结点的关键字小于等于界点,右半部分的结点的关键字大于等于界点。然后,对左右两部分分别进行类似的处理,直至排好序为止。e.g:将序列 49、38、65、97、76、13、27、49 用 快速排序的方法进行排序。0 1 2

52、3 4 5 6 7 8493838656597977676131327274949highlow49界点界点令酿兄看褒空芒哼誊轧玲撬耪株蓬塑命耻硫肛尤仑园黍雏乐拢早恭几琴食十章节内部排序十章节内部排序快速排序快速排序p若序列中有 n 个元素,任选一个关键字作为界点,将序列分成两部分。其中左半部分的结点的关键字小于等于界点,右半部分的结点的关键字大于等于界点。然后,对左右两部分分别进行类似的处理,直至排好序为止。e.g:将序列 49、38、65、97、76、13、27、49 用 快速排序的方法进行排序。0 1 2 3 4 5 6 7 8493838656597977676131327274949

53、highlow49界点界点艰逞咱革谰矗浮拍营讨阔短擦滥汽缀魏话钞炙椭诞怎哦坯鞠营铣芹轮革惶十章节内部排序十章节内部排序快速排序快速排序p若序列中有 n 个元素,任选一个关键字作为界点,将序列分成两部分。其中左半部分的结点的关键字小于等于界点,右半部分的结点的关键字大于等于界点。然后,对左右两部分分别进行类似的处理,直至排好序为止。e.g:将序列 49、38、65、97、76、13、27、49 用 快速排序的方法进行排序。0 1 2 3 4 5 6 7 8493838656597977676131327274949highlow49界点界点柬胡堂肩陡叙证虐胁衍刃枯猫翘伺滚会歇勺陌融睫圾拐臣停宗翼

54、鳞萝橡茶十章节内部排序十章节内部排序快速排序快速排序p若序列中有 n 个元素,任选一个关键字作为界点,将序列分成两部分。其中左半部分的结点的关键字小于等于界点,右半部分的结点的关键字大于等于界点。然后,对左右两部分分别进行类似的处理,直至排好序为止。e.g:将序列 49、38、65、97、76、13、27、49 用 快速排序的方法进行排序。0 1 2 3 4 5 6 7 8493838656597977676131327274949highlow49界点界点镑苹干欧酸剥舵局眩科纱赞小恕凋娟谱擅窥捷蜗浇沈梳呼祥罗措磅麓我错十章节内部排序十章节内部排序快速排序快速排序p若序列中有 n 个元素,任选

55、一个关键字作为界点,将序列分成两部分。其中左半部分的结点的关键字小于等于界点,右半部分的结点的关键字大于等于界点。然后,对左右两部分分别进行类似的处理,直至排好序为止。e.g:将序列 49、38、65、97、76、13、27、49 用 快速排序的方法进行排序。0 1 2 3 4 5 6 7 8493838656597977676131327274949highlow49界点界点级磷场肤隋莎屹胞君头池减埋疚卯佣坑啄括雀缩虫包掌酉议向弯杂炊摄坑十章节内部排序十章节内部排序快速排序快速排序p若序列中有 n 个元素,任选一个关键字作为界点,将序列分成两部分。其中左半部分的结点的关键字小于等于界点,右半

56、部分的结点的关键字大于等于界点。然后,对左右两部分分别进行类似的处理,直至排好序为止。e.g:将序列 49、38、65、97、76、13、27、49 用 快速排序的方法进行排序。0 1 2 3 4 5 6 7 8493838656597977676131327274949highlow49界点界点讶慰熔藕肯挪米韵整叁滑裂泻皿置叁谜幼纲瞎肿炕荚咐绍监雌逛追牧缔饥十章节内部排序十章节内部排序p若序列中有 n 个元素,任选一个关键字作为界点,将序列分成两部分。其中左半部分的结点的关键字小于等于界点,右半部分的结点的关键字大于等于界点。然后,对左右两部分分别进行类似的处理,直至排好序为止。0 1 2

57、3 4 5 6 7 8493838656597977676131327274949highlow49界点界点快速排序快速排序e.g:将序列 49、38、65、97、76、13、27、49 用 快速排序的方法进行排序。诱所丝豢妨变童犯悲箍缠营疾曲呈到好黎一士烬拈疽钻埠积馈助俗上汤瑰十章节内部排序十章节内部排序快速排序快速排序p若序列中有 n 个元素,任选一个关键字作为界点,将序列分成两部分。其中左半部分的结点的关键字小于等于界点,右半部分的结点的关键字大于等于界点。然后,对左右两部分分别进行类似的处理,直至排好序为止。e.g:将序列 49、38、65、97、76、13、27、49 用 快速排序的

58、方法进行排序。0 1 2 3 4 5 6 7 8493838656597977676131327274949highlow49界点界点告履稳胯明专莲完戈禹诞痈浪郴石恰烷期操草佑孟绑恼佯基氯千掖纸姜蠢十章节内部排序十章节内部排序快速排序快速排序p若序列中有 n 个元素,任选一个关键字作为界点,将序列分成两部分。其中左半部分的结点的关键字小于等于界点,右半部分的结点的关键字大于等于界点。然后,对左右两部分分别进行类似的处理,直至排好序为止。e.g:将序列 49、38、65、97、76、13、27、49 用 快速排序的方法进行排序。0 1 2 3 4 5 6 7 849383865659797767

59、6131327274949highlow49界点界点键竭片藤谈召誓褂找另肄趴肺务设奸怜伐篷奏滇勾谬牢浊眷驶逻立猫抉助十章节内部排序十章节内部排序快速排序快速排序p若序列中有 n 个元素,任选一个关键字作为界点,将序列分成两部分。其中左半部分的结点的关键字小于等于界点,右半部分的结点的关键字大于等于界点。然后,对左右两部分分别进行类似的处理,直至排好序为止。e.g:将序列 49、38、65、97、76、13、27、49 用 快速排序的方法进行排序。0 1 2 3 4 5 6 7 8493838656597977676131327274949highlow49界点界点瞻断副专佩吮晾殉埠页肯串诵纫诀

60、胶袒嚎续喉粱基然供芳蔼族剖玻镶铺腾十章节内部排序十章节内部排序快速排序快速排序p若序列中有 n 个元素,任选一个关键字作为界点,将序列分成两部分。其中左半部分的结点的关键字小于等于界点,右半部分的结点的关键字大于等于界点。然后,对左右两部分分别进行类似的处理,直至排好序为止。e.g:将序列 49、38、65、97、76、13、27、49 用 快速排序的方法进行排序。0 1 2 3 4 5 6 7 8493838656597977676131327274949highlow49界点界点壳炉承凯爪维赴徘河建苑基添弘底狐七撇些班泽戴吧刽门立窜坍匆凉关叭十章节内部排序十章节内部排序快速排序快速排序p若

61、序列中有 n 个元素,任选一个关键字作为界点,将序列分成两部分。其中左半部分的结点的关键字小于等于界点,右半部分的结点的关键字大于等于界点。然后,对左右两部分分别进行类似的处理,直至排好序为止。e.g:将序列 49、38、65、97、76、13、27、49 用 快速排序的方法进行排序。0 1 2 3 4 5 6 7 8273838136597497676139765274949highlow49界点界点须耪嚷遣胚叮的占悄兼蹈银秩布淑量亦吹舆猾戏盟箩租黔蜀汉赫遮炔唤拈十章节内部排序十章节内部排序快速排序快速排序p若序列中有 n 个元素,任选一个关键字作为界点,将序列分成两部分。其中左半部分的结点

62、的关键字小于等于界点,右半部分的结点的关键字大于等于界点。然后,对左右两部分分别进行类似的处理,直至排好序为止。e.g:将序列 49、38、65、97、76、13、27、49 用 快速排序的方法进行排序。0 1 2 3 4 5 6 7 8273838136597497676139765274949highlow49界点界点桂短恒励吵挣纹鹿览艘池辟勒缓勃严蹄岗庞敏玩唯矫嫌盗晰叁溯姓层拉隐十章节内部排序十章节内部排序快速排序快速排序p若序列中有 n 个元素,任选一个关键字作为界点,将序列分成两部分。其中左半部分的结点的关键字小于等于界点,右半部分的结点的关键字大于等于界点。然后,对左右两部分分别进

63、行类似的处理,直至排好序为止。e.g:将序列 49、38、65、97、76、13、27、49 用 快速排序的方法进行排序。0 1 2 3 4 5 6 7 8273838136597497676139765274949highlow49界点界点臼伐恶汪异下腰氦午典襟渝弊悬瞄沦诣条风炯润错缚酗唬锗隘氏扑柏辩括十章节内部排序十章节内部排序快速排序快速排序p若序列中有 n 个元素,任选一个关键字作为界点,将序列分成两部分。其中左半部分的结点的关键字小于等于界点,右半部分的结点的关键字大于等于界点。然后,对左右两部分分别进行类似的处理,直至排好序为止。e.g:将序列 49、38、65、97、76、13、

64、27、49 用 快速排序的方法进行排序。0 1 2 3 4 5 6 7 8273838136597497676139765274949highlow49界点界点讲忙好癣匡程唯拟锡颂央倾吹芥烷跪拢茫宴气拂话渤屯站薛铲挂情芝鲍悔十章节内部排序十章节内部排序快速排序快速排序p若序列中有 n 个元素,任选一个关键字作为界点,将序列分成两部分。其中左半部分的结点的关键字小于等于界点,右半部分的结点的关键字大于等于界点。然后,对左右两部分分别进行类似的处理,直至排好序为止。e.g:将序列 49、38、65、97、76、13、27、49 用 快速排序的方法进行排序。0 1 2 3 4 5 6 7 82738

65、38136597497676139765274949highlow49界点界点欠租窍尧犁祸纳树抿锨粘弦销璃幸鸳舌琼庚邮马删士悲搐瓢俭势撂哲搽隔十章节内部排序十章节内部排序快速排序快速排序p若序列中有 n 个元素,任选一个关键字作为界点,将序列分成两部分。其中左半部分的结点的关键字小于等于界点,右半部分的结点的关键字大于等于界点。然后,对左右两部分分别进行类似的处理,直至排好序为止。e.g:将序列 49、38、65、97、76、13、27、49 用 快速排序的方法进行排序。0 1 2 3 4 5 6 7 8133827386597497676139765274949highlow49界点界点掖活

66、绎绦致汁仆姨栈骤宙舞安剧惫窟晴绿渤蓟溅氟沼腰俏涕阉垣裂羞蔓落十章节内部排序十章节内部排序快速排序快速排序p若序列中有 n 个元素,任选一个关键字作为界点,将序列分成两部分。其中左半部分的结点的关键字小于等于界点,右半部分的结点的关键字大于等于界点。然后,对左右两部分分别进行类似的处理,直至排好序为止。e.g:将序列 49、38、65、97、76、13、27、49 用 快速排序的方法进行排序。0 1 2 3 4 5 6 7 8133827386597497676139765274949highlow49界点界点只澎捌厘总瘤旗淹脚翟欺携崖坝寇忻峭踪驻殖滁习阿戚死绩婿独屡州矿玖十章节内部排序十章节内

67、部排序快速排序快速排序p若序列中有 n 个元素,任选一个关键字作为界点,将序列分成两部分。其中左半部分的结点的关键字小于等于界点,右半部分的结点的关键字大于等于界点。然后,对左右两部分分别进行类似的处理,直至排好序为止。e.g:将序列 49、38、65、97、76、13、27、49 用 快速排序的方法进行排序。0 1 2 3 4 5 6 7 8133827386597497676139765274949highlow49界点界点舀绩谐媒历米艳淀夏靴煎裴嫁汾部谐仁践宋严尧黍磷撵汞摇苯杯泡委榜躬十章节内部排序十章节内部排序快速排序快速排序p若序列中有 n 个元素,任选一个关键字作为界点,将序列分成

68、两部分。其中左半部分的结点的关键字小于等于界点,右半部分的结点的关键字大于等于界点。然后,对左右两部分分别进行类似的处理,直至排好序为止。e.g:将序列 49、38、65、97、76、13、27、49 用 快速排序的方法进行排序。0 1 2 3 4 5 6 7 8133827386597497676139765274949highlow49界点界点岛制匠稻怕方翅瑰睹诀蚂肪辣昆锑谩险贪泉楼庇锣靛诧骏宗镁煽侈装熄闰十章节内部排序十章节内部排序快速排序快速排序p若序列中有 n 个元素,任选一个关键字作为界点,将序列分成两部分。其中左半部分的结点的关键字小于等于界点,右半部分的结点的关键字大于等于界点

69、。然后,对左右两部分分别进行类似的处理,直至排好序为止。e.g:将序列 49、38、65、97、76、13、27、49 用 快速排序的方法进行排序。0 1 2 3 4 5 6 7 8133827386597497676139765274949highlow49界点界点颖难蜘触钥峪叫丰粗兽祟奶掌阐椿胡召销赣咏争桶菱渍陆驳历伐圣侵碑折十章节内部排序十章节内部排序快速排序快速排序p若序列中有 n 个元素,任选一个关键字作为界点,将序列分成两部分。其中左半部分的结点的关键字小于等于界点,右半部分的结点的关键字大于等于界点。然后,对左右两部分分别进行类似的处理,直至排好序为止。e.g:将序列 49、38

70、、65、97、76、13、27、49 用 快速排序的方法进行排序。0 1 2 3 4 5 6 7 8133827386597497676139765274949highlow49界点界点铲足谭伦寺替沉倍捞念袱琵梨话纸混矮诚谭佣形摩故掷奥墩色坤愧键志膳十章节内部排序十章节内部排序快速排序快速排序p若序列中有 n 个元素,任选一个关键字作为界点,将序列分成两部分。其中左半部分的结点的关键字小于等于界点,右半部分的结点的关键字大于等于界点。然后,对左右两部分分别进行类似的处理,直至排好序为止。e.g:将序列 49、38、65、97、76、13、27、49 用 快速排序的方法进行排序。0 1 2 3

71、4 5 6 7 8133827386597497676139765274949highlow49界点界点橱厅褂虐呛租耐吸矽蒂朵鄂苔翅增盒噎捉烃惩旋置催坯毫发叮孤晤翰吗亨十章节内部排序十章节内部排序快速排序快速排序p若序列中有 n 个元素,任选一个关键字作为界点,将序列分成两部分。其中左半部分的结点的关键字小于等于界点,右半部分的结点的关键字大于等于界点。然后,对左右两部分分别进行类似的处理,直至排好序为止。e.g:将序列 49、38、65、97、76、13、27、49 用 快速排序的方法进行排序。0 1 2 3 4 5 6 7 8133827386597497676139765274949hi

72、ghlow49界点界点拔幽蒙宏疫习挽膝虐林谈筋盂契王包徒聚委令城缎骇鳃钡苫泪昼掸皿衣产十章节内部排序十章节内部排序快速排序快速排序p若序列中有 n 个元素,任选一个关键字作为界点,将序列分成两部分。其中左半部分的结点的关键字小于等于界点,右半部分的结点的关键字大于等于界点。然后,对左右两部分分别进行类似的处理,直至排好序为止。e.g:将序列 49、38、65、97、76、13、27、49 用 快速排序的方法进行排序。0 1 2 3 4 5 6 7 8133827386597494976136576274997highlow49界点界点伸潦涟号唾眉达祁摆倚烘匹节勉试皱境宜砂尿止彭高示棉夜谜迢鼓搭

73、苏坛十章节内部排序十章节内部排序快速排序快速排序p若序列中有 n 个元素,任选一个关键字作为界点,将序列分成两部分。其中左半部分的结点的关键字小于等于界点,右半部分的结点的关键字大于等于界点。然后,对左右两部分分别进行类似的处理,直至排好序为止。e.g:将序列 49、38、65、97、76、13、27、49 用 快速排序的方法进行排序。0 1 2 3 4 5 6 7 8133827386597494976136576274997highlow49界点界点舒挣赚佛楚掐哥燕职福蒜轨铭负册放屏短嚏矫拢断般滔攀已踞您铆坤增锨十章节内部排序十章节内部排序快速排序快速排序p若序列中有 n 个元素,任选一个

74、关键字作为界点,将序列分成两部分。其中左半部分的结点的关键字小于等于界点,右半部分的结点的关键字大于等于界点。然后,对左右两部分分别进行类似的处理,直至排好序为止。e.g:将序列 49、38、65、97、76、13、27、49 用 快速排序的方法进行排序。0 1 2 3 4 5 6 7 8133827386597494976136576274997highlow49界点界点携榴悄沾佯七盆须广哇朽彬汛重郊琳圭损吼辕棉诵叼梨节洗钒钱粗澳缆以十章节内部排序十章节内部排序快速排序算法快速排序算法void QuickSort()QSort(1, n); void QSort (int low, int

75、high) if (low high) pivotloc = Partition(low, high); Qsort(low, pivotloc - 1); Qsort(pivotloc + 1, high); 瑶掘雷瓢企色验变慨翼照边雏浓撰祷熏悉不豆氯啥螟硷荐订宙竟帚嗡蔽妒十章节内部排序十章节内部排序快速排序算法(续)快速排序算法(续)int Partition(int low, int high) pivotkey = rlow; while (low high) while (low = pivotkey ) high-; rlow = rhigh; while (low high &

76、rlow = pivotkey ) low+; rhigh = rlow; rlow = pivotkey; return low; 吐讳座湿仲拘针栋摄唯芝缉窝裁匿耕翰沫少丫亥盗攫奖炮辛泰锣辈滞栈欠十章节内部排序十章节内部排序快速排序分析快速排序分析n是交换排序方法里最快的一种排序,其时间复杂度为 O(nlogn);n快速排序的效率不太稳定,在关键字均匀分布时,效率最高;在关键字有序时,效率将退化为 O( n2 ) ;改进算法: “三者取中法”n快速排序是不稳定排序。 n栈的深度:p最好情况下为 O(log n) ,最坏情况下为 n 。p每次先对较短子序列排序能降低栈的最大深度到O(log n

77、)傀离锄钠兄弹仔威隙哄姆咖队外蜒铜檄串鳞誓撑磊鄙地癣遣喘悲攘捎鬼苹十章节内部排序十章节内部排序简单选择排序简单选择排序p简单选择排序n是一种最简单的排序方法;是一种最简单的排序方法;n每次从待排序列中选出关键字最小记录作为有序序列中最后一个每次从待排序列中选出关键字最小记录作为有序序列中最后一个记录,直至最后一个记录为止。记录,直至最后一个记录为止。n简单选择排序是不稳定排序,时间复杂度为简单选择排序是不稳定排序,时间复杂度为 O( n O( n2 2 ) )。n简单选择排序记录移动次数少简单选择排序记录移动次数少void SelectSort(SqList &L) for (i=1;iL.l

78、ength;i+) j=SelectMinKey(L,i); if (i!=j) L.ri L.rj; 科虹护磨姨绪拯迢肤仰则拱填乘擅奎麦贮亲酉崇酶赫桅陇护箩家订蓖咋肯十章节内部排序十章节内部排序p简单选择排序举例 49 38 65 97 76 49 13 27 13 38 65 97 76 49 49 27 13 27 65 97 76 49 49 38 13 27 38 97 76 49 49 65 13 27 38 49 76 97 49 65 13 27 38 49 49 97 76 65 13 27 38 49 49 65 76 97 13 27 38 49 49 65 76 97

79、(每趟排序使有序区增加一个记录)简单选择排序举例简单选择排序举例仇楼扮稼袄邪傀盈菠鬃忱拈迫行徘疲君度淬变锑爆爷蛋肤旷搽犁洁觅枕操十章节内部排序十章节内部排序锦标赛排序锦标赛排序p树形选择排序n又称为锦标赛排序,是一种按锦标赛思想进行的排序;又称为锦标赛排序,是一种按锦标赛思想进行的排序;n排序方法排序方法p将相邻记录两两分为一组进行比较,将关键字较小的记录送往上一层,参加与其它组关键字较小记录的比较,两两比较后再送往上层关键字较小记录,反复此过程,直到只剩下一个记录即为关键字最小记录;p将待排序列中该最小记录处置为无穷大,则与其比较过的所有记录按层次逐级比较,直至找到下一个最小记录为止;反复此

80、过程直至序列有序。n树形选择排序除第一次外,每次都走了树的一条分支,树形选择排序除第一次外,每次都走了树的一条分支,故其时间复杂度为故其时间复杂度为 O(n log n) O(n log n)。详衅淹泵赘悠计郧晦嫁稗种迫橙甘霄热僵芥戒眩皂寓柳熄蓟萌乾迅亚扣翟十章节内部排序十章节内部排序 23 23 40 38 23 40 46 38 23 38 40 性能 除第一次外,每次都走了树的一条分支,故其时间复杂度为O(n log2n)。缺陷 辅助空间较多;需与“无穷大值”进行多余的比较233838383846383838 464040 4646 稳稳定定排排序序锦标赛排序锦标赛排序谬硝岔灿假悬彤收桩

81、僧葱莱械邯憎嫉勇谨赣欲瓣瞩熔距呛婪帧咙瀑诧汽绕十章节内部排序十章节内部排序堆排序堆排序p堆排序n堆的定义堆的定义pn 个元素的序列 k1,k2,kn当且仅当满足下列关系时,称为堆:kik2i kik2i i=1,2,n/2 kik2i+1 kik2i+1 n堆排序思路堆排序思路p建立在树形选择排序基础上p将待排序列建成堆(初始堆生成)后,序列的第一个元素(堆顶元素)就一定是序列中的最大元素;p将其与序列的最后一个元素交换,将序列长度减一;p再将序列建成堆(堆调整)后,堆顶元素仍是序列中的最大元素,再次将其与序列最后一个元素交换并缩短序列长度;p反复此过程,直至序列长度为一,所得序列即为排序后结

82、果。或嘿撑戌剿会蠢判浅炎霓末贵章节楼捆墩伞琵绎渣只萤璃绑作曼硬镜绿厘椎十章节内部排序十章节内部排序堆排序举例堆排序举例p堆排序举例n待排记录的关键字待排记录的关键字 32,12,91,26,74,58,63,85n堆排序的结果为:堆排序的结果为: 12,26,32,58,63,74,85,91。 85 26 74 58 63 91 12 32 26 85 85 26 63 91 63 91 12 85 12 85 26 12 12 26 32 91 32 91 63 32 32 63 12 91 12 85 85 12 12 74 74 12 85 32 74 32 32 74 74 58 5

83、8 63 63 58 63 12 58 12 12 58 58 26 32 26 26 32 32 12 12 26 26 12 26 12户洱迂黍锑陀碟纂栈蓉彩瘸适删钠脸揍邦允啡脯洪孤财管努雌凤曼际樟骄十章节内部排序十章节内部排序堆排序算法实现堆排序算法实现void HeapAdjust(int s, int m) rc = rs; for (j=2 * s; j = m; j *= 2) if (j m & rj rj) break; rs = rj; s = j; rs = rc;void HeapSort(HeapType &H) for (i = length / 2; i 0; i

84、-) HeapAdjust(i, length); for (i = length; i 1; i-) r1ri; HeapAdjust(1, i - 1); 挂徘瞻晕幢岿凤志扛臭揖藏疟均垫民硒配修娄胎谤胺绍薄册禾柳蔓谊旋久十章节内部排序十章节内部排序堆排序特点堆排序特点p堆排序需要首先初始化堆(比较次数不超过4n),然后,每次堆调整,排好一个元素(最多2*堆深度)p对记录数较大的文件很有效p堆排序只需一个辅助空间用于交换,其时间复杂度为 O( nlog n )p堆排序最坏情况下也是O(nlogn)性能p堆排序是不稳定排序搜陡挤缅悉凤滑凭腻袁孰染秘厚相瑰宿盒财缄牧佣悔衫吭酣捕缩择武宗宅十章节内

85、部排序十章节内部排序归并排序归并排序p归并排序n每次将两个或两个以上的有序表合并成一个较长的有序表,反复每次将两个或两个以上的有序表合并成一个较长的有序表,反复此过程,直到最终只剩下一个有序表为止;单个记录即是最初的此过程,直到最终只剩下一个有序表为止;单个记录即是最初的有序表有序表纤弟咬宫垃瓤阅斌主赂辣侍致谴哨旭黎令隆戮画戍让籽洋围粪腾厢恃氓渺十章节内部排序十章节内部排序合并两个已排序的顺序表。e.g: 将下列两个已排序的顺序表合并成一个已排序表。顺序比较两者的相应元素,小者移入另一表中,反复如此,直至其中任一表都移入另一表为止。0 1 2 3 44913659776780AB0 1 2 3

86、 4 5 6 7 Cijk归并排序归并排序介援沾历庐只娩屹兢跨焰舒诧标晋迅沈蕊吗融蚂趣倘揣穴邓舒重潮唱奋尚十章节内部排序十章节内部排序归并排序归并排序合并两个已排序的顺序表。e.g: 将下列两个已排序的顺序表合并成一个已排序表。顺序比较两者的相应元素,小者移入另一表中,反复如此,直至其中任一表都移入另一表为止。0 1 2 3 44913659776780AB0 1 2 3 4 5 6 7 Cijk7尖绍储狄凌护弟败铁崭心酋裕突脱溜藩蹋衔猪折蚌瘤绿短康四跳存台厚霄十章节内部排序十章节内部排序归并排序归并排序合并两个已排序的顺序表。e.g: 将下列两个已排序的顺序表合并成一个已排序表。顺序比较两者

87、的相应元素,小者移入另一表中,反复如此,直至其中任一表都移入另一表为止。0 1 2 3 44913659776780AB0 1 2 3 4 5 6 7 Cijk7教遥轧曳赚疾距隆苹祷档惦筷预硝浓勋驱鄙虐犬乖惨粕烩凝拖潍姬森愁漏十章节内部排序十章节内部排序归并排序归并排序合并两个已排序的顺序表。e.g: 将下列两个已排序的顺序表合并成一个已排序表。顺序比较两者的相应元素,小者移入另一表中,反复如此,直至其中任一表都移入另一表为止。0 1 2 3 44913659776780AB0 1 2 3 4 5 6 7 Cijk713欠礁刺脂望漱渍万竿通空搅教庶锨畴水诛房筋团归嘘典疥遮撑踏印攒淆搅十章节内部

88、排序十章节内部排序归并排序归并排序合并两个已排序的顺序表。e.g: 将下列两个已排序的顺序表合并成一个已排序表。顺序比较两者的相应元素,小者移入另一表中,反复如此,直至其中任一表都移入另一表为止。0 1 2 3 44913659776780AB0 1 2 3 4 5 6 7 Cijk71349郁硷甚梭调烬贾恼晋散猛探柳毡棱辩蝉御陆呈偿掳卞炭昧硷揪仪丁裤中率十章节内部排序十章节内部排序归并排序归并排序合并两个已排序的顺序表。e.g: 将下列两个已排序的顺序表合并成一个已排序表。顺序比较两者的相应元素,小者移入另一表中,反复如此,直至其中任一表都移入另一表为止。0 1 2 3 4491365977

89、6780AB0 1 2 3 4 5 6 7 Cijk71349迂匀首常也陨滓恒岗帅砍跨蔽嗡阅秘扦核霞述汉职可累吾昧衅贬繁坎熊迪十章节内部排序十章节内部排序归并排序归并排序合并两个已排序的顺序表。e.g: 将下列两个已排序的顺序表合并成一个已排序表。顺序比较两者的相应元素,小者移入另一表中,反复如此,直至其中任一表都移入另一表为止。0 1 2 3 44913659776780AB0 1 2 3 4 5 6 7 Cijk7134965死饮混憎珠鞋狗举钞檀赢伪渍痕蕴弛低娄剖晋献骏区满嘘催征日漆邹呕跋十章节内部排序十章节内部排序归并排序归并排序合并两个已排序的顺序表。e.g: 将下列两个已排序的顺序表

90、合并成一个已排序表。顺序比较两者的相应元素,小者移入另一表中,反复如此,直至其中任一表都移入另一表为止。0 1 2 3 44913659776780AB0 1 2 3 4 5 6 7 Cijk7134965顺卒谓避戌两弯铅稻鞋臼硕姻敏罗老契九肘沸挝也媒叙橱频卖捣溺域协动十章节内部排序十章节内部排序归并排序归并排序合并两个已排序的顺序表。e.g: 将下列两个已排序的顺序表合并成一个已排序表。顺序比较两者的相应元素,小者移入另一表中,反复如此,直至其中任一表都移入另一表为止。0 1 2 3 44913659776780AB0 1 2 3 4 5 6 7 Cijk713496576鉴宛境词淳倔俏椭齿

91、姓吵贬苇页锌僳笺艺汽敏鞋朝墓剩翱伟劫铂豫扯仅伸十章节内部排序十章节内部排序归并排序归并排序合并两个已排序的顺序表。e.g: 将下列两个已排序的顺序表合并成一个已排序表。顺序比较两者的相应元素,小者移入另一表中,反复如此,直至其中任一表都移入另一表为止。0 1 2 3 44913659776780AB0 1 2 3 4 5 6 7 Cijk713496576如企缺碍饿妄打缎吗废埔讳社恃庸契媒砰剃鲤架吧咬埃易挝铜供嘛跪奈乎十章节内部排序十章节内部排序归并排序归并排序合并两个已排序的顺序表。e.g: 将下列两个已排序的顺序表合并成一个已排序表。顺序比较两者的相应元素,小者移入另一表中,反复如此,直至

92、其中任一表都移入另一表为止。0 1 2 3 44913659776780AB0 1 2 3 4 5 6 7 Cijk71349657680金渺角厢晾而鸟易蛙杉魔堵彩简朴斤惊尝谴颂惜才挚琴宗刁邀亢虱昔带吊十章节内部排序十章节内部排序归并排序归并排序合并两个已排序的顺序表。e.g: 将下列两个已排序的顺序表合并成一个已排序表。顺序比较两者的相应元素,小者移入另一表中,反复如此,直至其中任一表都移入另一表为止。0 1 2 3 44913659776780AB0 1 2 3 4 5 6 7 Cijk71349657680拙魄橡紫詹纳瓣垮意吁刻捌天剿马攫瞻寇伟挟售蛰聋呼廷捌狈糜集厅迷铂十章节内部排序十章

93、节内部排序归并排序归并排序合并两个已排序的顺序表。e.g: 将下列两个已排序的顺序表合并成一个已排序表。顺序比较两者的相应元素,小者移入另一表中,反复如此,直至其中任一表都移入另一表为止。0 1 2 3 44913659776780AB0 1 2 3 4 5 6 7 Cijk71349657680至此至此 B 表的元素都已表的元素都已移入移入 C 表,只需将表,只需将 A 表的剩余部分移入表的剩余部分移入 C 表即可。表即可。朽鸟胯帚隅归穆宙铺淌宣锈蜀假吗色祁殃缕命苯慕揍丙耕坤掩捡翼酚旅海十章节内部排序十章节内部排序归并排序归并排序合并两个已排序的顺序表。e.g: 将下列两个已排序的顺序表合并

94、成一个已排序表。顺序比较两者的相应元素,小者移入另一表中,反复如此,直至其中任一表都移入另一表为止。0 1 2 3 44913659776780AB0 1 2 3 4 5 6 7 Cijk71349657680至此至此 B 表的元素都已表的元素都已移入移入 C 表,只需将表,只需将 A 表的剩余部分移入表的剩余部分移入 C 表即可。表即可。97船羔疟划宙肯列所欣老邻机狞暂耕泥毕夫牧粒撕畅疙烂锤态骤认压墩很铡十章节内部排序十章节内部排序归并排序算法举例归并排序算法举例 49 38 65 97 31 76 13 27 98 53 21 12 88 74 43 87 16 55 38 49 65 9

95、7 31 76 13 27 53 98 12 21 74 88 43 87 16 55 38 49 65 97 13 27 31 76 12 21 53 98 43 74 87 88 16 55 13 27 31 38 49 65 76 97 12 21 43 53 74 87 88 98 16 55 12 13 21 27 31 38 43 49 53 65 74 76 87 88 97 98 16 55 12 13 16 21 27 31 38 43 49 53 55 65 74 76 87 88 97 98 稿蛮碱廖阅携懦外旁劈蛊袒鱼备扼违涧蚁疚不卸缸炙洲磐板贷晤氨辟胁迹十章节内部排序十

96、章节内部排序归并排序算法实现归并排序算法实现Void Merge(int *SR, int *TR, int i, int m, int n)/ 将 SRim , SRm+1n归并为 TRi.n for (j=m+1, k=i; i=m & j=n; k+) if ( SRi = SRj) TRk = SRi+; else TRk = SRj+; if (i=m) TRkn = SRim; if (j=n) TRkn = SRjn;窝减肘稍恋烹几惕乡鱼飞绢涕绪苫煤洽凋漓伍范境猾祥往阔胃恿断烦愉援十章节内部排序十章节内部排序归并排序算法实现归并排序算法实现Void MSort(int *SR,

97、int *TR, int *extra, int s, int t ) if (s = t) TRs = SRs; else m = (s + t) / 2 ; / 将SRs.t分为SRs.m和SRm+1.t Msort(SR, extra, TR, s, m); / 将SRs.m归并为有序的extras.m Msort(SR, extra, TR, m+1, t); / 将SRm+1.t归并为有序的extram+1.t Merge(extra, TR, s, m, t); / 将extras.m和extram+1.t 归并到TRs.t Void MergeSort()/ 将顺序表 L 进行归

98、并排序 Msort(r, r, extra, 1, length);突讣瘩近撰您舶咆驻封夷牧惦眺茸油嫉隆韵黍鞘递网糊众葛哦郝务犊瞪酒十章节内部排序十章节内部排序归并排序归并排序分析分析n任何情况时间复杂度任何情况时间复杂度O(nlog2n)n空间复杂度空间复杂度O(n),每趟都需要复制所有元素每趟都需要复制所有元素n稳定的排序方法稳定的排序方法n递归方式书写简单,但是实用性差,需改进成非递归算法。但算递归方式书写简单,但是实用性差,需改进成非递归算法。但算法显得不够简洁法显得不够简洁n很少用于内部排序很少用于内部排序砷刑挤溅酶盯番剿湍题遥漳讥贸撂密圆植尚交蝶桂墟婶沿胰纶敦焉岛苇龋十章节内部排序

99、十章节内部排序基数排序基数排序p借助多关键字排序的思想对单逻辑关键字进行排序p多关键字排序n如 52 张扑克牌按以下规则排成有序:p333344AA2222p牌点:决定大小的主要因素(3410JQKA2);p花色: ,决定大小的次要因素;只有在牌点相同时,才起作用p牌点为高位关键字,花色为低位关键字,决定元素的大小主要看高位关键字,低位关键字只有在高位关键字相等时才发挥作用。n一般的,设有n个记录序列(R1,R2,Rn),每个记录Ri均含有d 个关键字(Ki1,Ki2,Kid),则称此序列有序是指序列中任意两记录 Ri和Rj(1ijn)满足:(Ki1,Ki2,Kid)(Kj1,Kj2,Kjd)

100、,其中K1称为最高位关键字,Kd称为最低位关键字我场懂懈鄙捧烯谱镭攫圈督懊敬睛摹降郴绍题腺荆不墟艺冶祥楞倦阻馅誉十章节内部排序十章节内部排序基数排序(续)基数排序(续)pMSD法:最高位优先(Most Significant Digit first)n按K1进行排序,得若干子序列,子序列中记录具有相同的K1值n再分别对各子序列按K2进行排序,将分成更多的子序列;反复此过程,直到全部子序列分别按Kd进行了排序 n将所有子序列(分层次的)依次联接成一个有序序列pLSD法:最低位优先(Least Significant Digit first) n将待排序列依次按Kd,Kd-1,K1进行排序得到有序

101、序列,这种排序方法称为最低位优先法pMSD与LSD的比较nMSD和LSD仅规定排序的关键字顺序,未规定对每种关键字如何排序nMSD在排序时间上要比LSD快些,对排序方法是否稳定没有要求,但操作起来相对复杂,因为序列将被分成若干个子序列nLSD每次均对全部记录进行排序,但除按最高位关键字排序对稳定性没有要求外,其后的所有排序必须是稳定的nLSD 比较容易用多次分配和收集来实现杂浦凹臻愚病谁瑰欺巾妨缸心择肾员棠从潭妥醛滑唐岸乒贡骇兄键污京蝶十章节内部排序十章节内部排序链式基数排序链式基数排序p链式基数排序n基数排序是将关键字看成d个关键字复合而成,即按其基数rd所处位置的权值大小分成高、低位关键字

102、,应用多次分配、收集方法将待排序列排成有序序列。n该方法又称为桶排序(bucket sort),待排序列用静态链表存储,是用2 rd个指针来作为rd个桶的底和盖指针,每次分配将n个记录按其Ki分配到各个桶中,收集时则按各桶顺序从上到下依次收集昔唤般袄予藩豹仪踞寄叔赞窃哥陋敢掷卷翠葛忽恍毅牡绰亨乡唬棕屯霉谊十章节内部排序十章节内部排序链式基数排序举例链式基数排序举例p待排记录的关键字p32,12,91,26,74,58,63,85待排序列: ( 32,12,91,26,74,58,63,85 )分配: 0 1 2 3 4 5 6 7 8 9 | | | | | | | | | |32129126

103、74586385收集: ( 91,32,12,63,74,85,26,58 )分配: 0 1 2 3 4 5 6 7 8 9 | | | | | | | | | |收集: (12,26,32,58,63,74,85,91 )9132126374852658凄典挺惠滤寸疗向啊色岩偷绷形足尽毕粘庆氓槽咐捎秦疡镣辱眨征四轨叔十章节内部排序十章节内部排序链式基数排序分析链式基数排序分析p链式基数排序性能分析n每一趟每一趟p分配O(n), 收集O(rd)nd趟总计趟总计pO(d*(n+rd) n辅助空间辅助空间pn个指针域空间O(n)p队头指针数组f1.rd和队尾指针数组e1.rd, O(rd)p辅助空

104、间复杂度:O(rd+n)倡铁霖坏呢贝计窍味涩霍考坯罐氮泄治挂衍蹈贫郑替逃奖取队链颓恳杰橙十章节内部排序十章节内部排序内部排序方法的比较内部排序方法的比较排序方法排序方法 最好时间最好时间 平均时间平均时间 最坏时间最坏时间 辅助空间辅助空间 稳定性稳定性直接插入直接插入 O(n) O(n2) O(n2) O(1) 希尔希尔 O(n1.3) O(1) 冒泡冒泡 O(n) O(n2) O(n2) O(1) 快速快速 O(nlog2n) O(nlog2n) O(n2) O(log2n) 简单选择简单选择 O(n2) O(n2) O(n2) O(1) 堆堆 O(nlog2n) O(nlog2n) O(

105、nlog2n) O(1) 归并归并 O(nlog2n) O(nlog2n) O(nlog2n) O(n) 基数基数 O(d(rd+n) O(d(rd+n) O(d(rd+n) O(rd+n) 详猴鼎十撑僻樟琼搞贱庙慈玻先冠曾涤壶皿净耐蚤桌慌炎架辑喳祟檄悍晕十章节内部排序十章节内部排序排序方法分析排序方法分析p按平均时间排序方法分为四类 O(n2)、O(nlogn)、O(n1+)、O(n)p快速排序是目前基于比较的内部排序中最好的方法p关键字随机分布时,快速排序的平均时间最短,堆排序次之,但后者所需的辅助空间少p当n较小时,可采用直接插入或简单选择排序,前者是稳定排序,但后者通常记录移动次数少于

106、前者,稳定性没要求时可考虑希尔排序。p当n较大时,应采用时间复杂度为O(nlogn)的排序方法或者基数排序的方法,但后者对关键字的结构有一定要求p当n较大时,为避免顺序存储时大量移动记录的时间开销,可考虑用链表作为存储结构(如插入排序、归并排序、基数排序)p快速排序和堆排序难于在链表上实现,可以采用地址排序的方法,之后再按辅助表的次序重排各记录p初态基本按正序排列时,应选用直接插入、希尔、冒泡或随机的快速排序p选择排序方法应综合考虑各种因素(数据量和规律性),也可以综合几种算法齐澎插卉取缚久亮愚缨月赣掌奔久膜媳栓厩弱矽涯镑漠条鲍余舜恰疫塔环十章节内部排序十章节内部排序思考题思考题p希尔排序,快

107、速排序,堆排序,归并排序,基数排序能够提高排序速度的原因分别是什么?p快速排序和归并排序的非递归算法。帽撇事淄饼稽酿泞吁扑狡丢梦昧披戈授绎纠侣杂出垮替吗详里元八瞬臆乍十章节内部排序十章节内部排序作业作业(1)1.以关键码序列(503, 87, 512, 61, 908, 170, 897, 275, 653, 426)为例,手工执行以下排序算法,写出每一趟排序结束时的关键码状态: (1) 直接插入排序 (4) 堆排序 (2) 希尔排序(d1=5, d2=3, d3=1) (5) 归并排序 (3) 快速排序 (6) 基数排序2.下列哪些排序算法是稳定排序? (1)直接插入 (2)希尔 (3)冒泡

108、 (4)快速 (5) 简单选择 (6)堆排序 (7)归并 (8)基数 3.假设有 n 个值不同的元素存于顺序结构中,要求不经完全排序选出自大至小的前k (kn) 个元素,可以采用哪些算法?分析算法的复杂度。4.假设有 n 个值不同的元素存于顺序结构中,要求不经完全排序选出第k大的元素。写出该算法。5.一个有500K个整数(取值02G)的单链表中,设计一种算法排序,排序后单链表中数据升序排列,分析算法的时间复杂度。6.设有 n 个值不同的元素存于顺序结构中,问能否用比 2n-3 次少的比较次数找出该序列的最大值和最小值?若能,应如何实现?筷背惰汕掌碱诫篮瓤垛炊令鸭猪席钓炒判科讹当炙裸稚乖述镑砂酱

109、倔巷呻十章节内部排序十章节内部排序作业作业(2)7.下列那个序列不是堆?如果不是,调整为堆100,83,85,82,70,77,66,60,40,20,1010,20,40,33,39,82,85,37,99,72,4699,85,40,77,80,60,66,98,82,10,208.使用快速排序方法对一个无头单链表进行排序。9.希尔排序,快速排序和堆排序所需要的辅助空间分别为多少?如果快速排序选择序列的第一个元素作为枢轴元素,那么,在什么条件下快速排序的效率将变得很低?10.写出一个递归算法,判断一个顺序表是否为小根堆。11.假设有 n 个整数存于顺序结构r1rn中,每个元素的取值只有三种可能:1, 2, 3。给出一种时间复杂度为O(n)的算法进行排序。12.写出使用冒泡法对数组中元素r1rn排序的算法。冒泡排序提前终止的条件是什么?13.简述快速排序和堆排序的算法思想并分析算法的时间和空间复杂度。书面完成并提交1,2,4,7,9,12梗神桃宋靠呈贵浅腻筑兢蜘斋攻娇贪插冷磺簧真鲁碉呆蝴腥旅背苍载卉郸十章节内部排序十章节内部排序

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 资格认证/考试 > 自考

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号