基本排序技术课件.ppt
《基本排序技术课件.ppt》由会员分享,可在线阅读,更多相关《基本排序技术课件.ppt(129页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第三章查找与排序(下)清清剥剥躺躺樟樟惋惋仟仟祭祭卤卤午午丹丹逞逞阑阑焚焚姚姚侮侮咀咀沸沸敞敞又又判判荐荐源源禄禄匹匹过过锡锡峪峪定定兼兼鞋鞋企企曲曲基基本本排排序序技技术术6h37478基基本本排排序序技技术术6h37478本节内容通过本单元的学习,了解、掌握有关排序的:n基本概念:n排序、排序分类、算法稳定性排序、排序分类、算法稳定性n典型的排序算法:n插入排序、选择排序、交换排序插入排序、选择排序、交换排序n归并排序、基数排序归并排序、基数排序隆隆造造鼓鼓怀怀篙篙贪贪瘸瘸婿婿膘膘虚虚芭芭烁烁劲劲萎萎稳稳账账禁禁吞吞剧剧序序苏苏喂喂羹羹矛矛睁睁茶茶岔岔炸炸歼歼露露犬犬领领基基本本排排序序技
2、技术术6h37478基基本本排排序序技技术术6h37478排序的基本概念n定定义义:将将记记录录按按关关键键字字递递增增(递递减减)的的次次序序排排列列起起来来,形成新的有序序列,称为排序。形成新的有序序列,称为排序。n描述:描述:设设n个个记记录录的的序序列列为为R1,R2,Rn,其其相相应应关关键键字字序序列列为为K1,K2,Kn,需需确确定定一一种种排排序序P1,P2,Pn,使使其其相相应应的的关关键键字字满满足足递递增增(升升序序),或或递递减减(降降序序)的关系的关系:Kp1 Kp2 .Kpn 或或 Kp1 Kp2 .Kpn3.3 基本的排序技术毯毯演演铝铝沤沤苞苞程程热热泵泵跑跑格
3、格桨桨恳恳边边点点蛔蛔乖乖迭迭霹霹讹讹首首鹃鹃潍潍吞吞迈迈醛醛塔塔兆兆掠掠泳泳入入革革叭叭基基本本排排序序技技术术6h37478基基本本排排序序技技术术6h37478n虽然排序算法是一个简单的问题,但是虽然排序算法是一个简单的问题,但是从计算机科学发展以来,已经有大量的从计算机科学发展以来,已经有大量的研究在此问题上。举例而言,研究在此问题上。举例而言,冒泡排序冒泡排序在在1956年就已经被研究。虽然大部分人年就已经被研究。虽然大部分人认为这是一个已经被解决的问题,有用认为这是一个已经被解决的问题,有用的新算法仍在不断的被发明。(例子:的新算法仍在不断的被发明。(例子:图书馆排序图书馆排序在在
4、2004年被发表)年被发表)逃逃捷捷营营搞搞周周弥弥篮篮现现贩贩吵吵愿愿扔扔摹摹拆拆贵贵居居瘟瘟啦啦殿殿把把狱狱奔奔臭臭第第膜膜塞塞晚晚奶奶噪噪凋凋泵泵猫猫基基本本排排序序技技术术6h37478基基本本排排序序技技术术6h37478算法稳定性21212525494925*25*161608080 1 2 3 4 5494908081616ExchangExchang=1=125*25*25252121494908081616ExchangExchang=1=1252525*25*2121胡胡笑笑亿亿撩撩钢钢槛槛缚缚淋淋沂沂匠匠呵呵嚣嚣样样豪豪摊摊靡靡您您悲悲波波亡亡欠欠筒筒呢呢官官较较字字被被
5、旭旭厄厄各各姜姜失失基基本本排排序序技技术术6h37478基基本本排排序序技技术术6h37478算法稳定性算法稳定性n当相等的元素是无法分辨的,比如像是整数,当相等的元素是无法分辨的,比如像是整数,稳定性并不是一个问题。然而,假设以下的数稳定性并不是一个问题。然而,假设以下的数对将要以他们的第一个数字来排序。对将要以他们的第一个数字来排序。n(4,1)(3,1)(3,7)(5,6)n(3,1)(3,7)(4,1)(5,6)(保持次序保持次序)n(3,7)(3,1)(4,1)(5,6)(次序被改变次序被改变)酬酬拦拦患患齐齐巳巳扦扦授授练练诉诉壮壮厄厄玫玫蛋蛋壮壮绎绎菩菩青青充充洱洱鸡鸡粘粘在在
6、碎碎吩吩笼笼羔羔此此缘缘怀怀喘喘悸悸振振基基本本排排序序技技术术6h37478基基本本排排序序技技术术6h37478n不稳定排序算法可能会在相等的键值中改变纪不稳定排序算法可能会在相等的键值中改变纪录的相对次序。录的相对次序。n不稳定排序算法可以被特别地实现为稳定。方不稳定排序算法可以被特别地实现为稳定。方法是法是 人工扩充键值的比较。然而,要记住这种人工扩充键值的比较。然而,要记住这种次序通常牵次序通常牵 涉到额外的空间负担。涉到额外的空间负担。药药慢慢匿匿层层绝绝蝴蝴煮煮琶琶质质悟悟润润楷楷误误咙咙冶冶巫巫亥亥唾唾即即变变匝匝奖奖幅幅喝喝淑淑恶恶千千湖湖汤汤篙篙哗哗巡巡基基本本排排序序技技
7、术术6h37478基基本本排排序序技技术术6h37478丰丰琐琐跌跌辫辫昆昆诈诈糯糯诊诊娶娶极极磅磅俺俺乡乡育育芭芭溜溜虱虱淄淄沽沽绘绘唐唐烈烈疮疮料料磕磕昂昂襄襄坊坊讼讼磁磁宝宝微微基基本本排排序序技技术术6h37478基基本本排排序序技技术术6h37478n简单起见,这里用顺序存储结构描述待排简单起见,这里用顺序存储结构描述待排序的记录。序的记录。n顺序存储结构(顺序存储结构(C语言描述):语言描述):#define N n typedef struct record int key;/*关键字项 */int otherterm;/*其它项其它项 */;typedef struct rec
8、ord RECORD;RECORD fileN+1;/*RECORD型的型的N+1元数组元数组*/排序算法的数据结构全全狼狼甘甘呛呛驼驼磊磊镣镣耻耻记记芹芹警警铲铲咒咒戌戌刽刽梯梯缮缮浴浴亭亭机机乡乡诺诺贾贾汛汛牢牢耻耻颅颅商商餐餐料料蕊蕊别别基基本本排排序序技技术术6h37478基基本本排排序序技技术术6h37478典型排序算法n冒泡排序冒泡排序n快速排序快速排序n简单插入排序简单插入排序n希尔排序希尔排序n简单选择排序简单选择排序n堆排序堆排序n归并排序归并排序n基数排序基数排序n二叉排序树二叉排序树诣诣症症僻僻庸庸窜窜雄雄阮阮绕绕于于界界楔楔缎缎纤纤展展顷顷禁禁算算菊菊穷穷事事穷穷娘娘迹
9、迹讯讯谣谣取取慕慕标标翘翘躬躬窜窜柿柿基基本本排排序序技技术术6h37478基基本本排排序序技技术术6h37478一、冒泡排序n1.指导思想:指导思想:两两两两比比较较待待排排序序记记录录的的关关键键字字,并并交交换换不不满满足足顺顺序序要要求求的的那那些偶对元素,直到全部数列满足有序为止。些偶对元素,直到全部数列满足有序为止。n冒冒泡泡排排序序(Bubble sort)是是基基于于交交换换排排序序的的一一种种算算法法。它它是是依依次次两两两两比比较较待待排排序序元元素素;若若为为逆逆序序(递递增增或或递递减减)则则进进行行交交换换,将将待待排排序序元元素素从从左左至至右右比比较较一一遍遍称称
10、为为一一趟趟“冒冒泡泡”。每每趟趟冒冒泡泡都都将将待待排排序序列列中中的的最最大大关关键键字字交交换换到到最最后后(或或最最前前)位置。直到全部元素有序为止。位置。直到全部元素有序为止。a1 a2 a3 an-1 an 最大值最大值获获睁睁娄娄笑笑贮贮洱洱屏屏疯疯蠕蠕烙烙犊犊缕缕守守汁汁窃窃国国蛋蛋潘潘躇躇坞坞拐拐灿灿单单父父和和那那腑腑伏伏酪酪跪跪尺尺虑虑基基本本排排序序技技术术6h37478基基本本排排序序技技术术6h374782.冒泡排序算法nstep1 从待排序队列的前端开始从待排序队列的前端开始(a1)两两比较记录两两比较记录的关键字值,若的关键字值,若aiai+1(i=1,2,n-
11、1),则交换,则交换ai和和ai+1的位置,直到队列尾部。一趟冒泡处理,将的位置,直到队列尾部。一趟冒泡处理,将序列中的最大值交换到序列中的最大值交换到an的位置。的位置。nstep2 如法炮制,第如法炮制,第k趟冒泡,从待排序队列的前趟冒泡,从待排序队列的前端开始端开始(a1)两两比较两两比较ai和和ai+1(i=1,2,n-k),并,并进行交换处理,选出序列中第进行交换处理,选出序列中第k大的关键字值,放大的关键字值,放在有序队列的最前端。在有序队列的最前端。(思考:为什么思考:为什么i=1,n-k?)nStep3 最多执行最多执行n-1趟的冒泡处理,序列变为有序。趟的冒泡处理,序列变为有
12、序。n从小到大排序从小到大排序偷偷亚亚绣绣蔬蔬遮遮毁毁瑚瑚黑黑垮垮耀耀鳖鳖挞挞子子闭闭缩缩套套侈侈削削鸽鸽劣劣叙叙纶纶炎炎讼讼痕痕寐寐新新诀诀妙妙练练霜霜证证基基本本排排序序技技术术6h37478基基本本排排序序技技术术6h37478冒泡排序算法举例设有数列 65,97,76,13,27,49,58 比较次数 第1趟 65,76,13,27,49,58,97 6 第2趟 65,13,27,49,58,76,97 5 第3趟 13,27,49,58,65,76,97 4 第4趟 13,27,49,58,65,76,97 3 第5趟 13,27,49,58,65,76,97 2 第6趟 13,27
13、,49,58,65,76,97 1 总计:21 次凿凿嫩嫩戳戳镭镭痪痪即即精精肚肚艺艺户户懒懒五五惑惑滥滥境境毅毅由由爽爽钵钵诀诀隔隔蚕蚕帛帛颇颇盛盛粳粳絮絮日日贞贞椒椒眨眨供供基基本本排排序序技技术术6h37478基基本本排排序序技技术术6h374783.冒泡排序实现bubble(int*item,int count)int a,b,t;for(a=1;acount;a+)/*n-1趟冒泡处理*/for(b=1;bitemb)/*若逆序,则交换*/t=itemb-1;/*它们的位置*/itemb-1=itemb;itemb=t;沦沦进进坤坤诫诫纺纺岩岩汉汉谁谁激激塘塘绣绣育育挟挟坊坊铜铜撞撞
14、数数彼彼眼眼众众首首丈丈暴暴秽秽闯闯贼贼霍霍哄哄塘塘祷祷咬咬拨拨基基本本排排序序技技术术6h37478基基本本排排序序技技术术6h374784.改进的冒泡排序n从从上上述述举举例例中中可可以以看看出出,从从第第4趟趟冒冒泡泡起起,序序列列已已有有序序,结结果果是是空空跑跑了了3趟趟。若若两两次次冒冒泡泡处处理理过过程程中中,没没有有进进行行交交换换,说说明明序序列列已已有有序序,则则停停止止交交换换。这这就就是是改改进进的的冒冒泡泡算算法的处理思想。法的处理思想。n用改进的冒泡算法进行处理,比较次数有所减少。用改进的冒泡算法进行处理,比较次数有所减少。对于数列对于数列 65,97,76,13,
15、27,49,58 比较次数比较次数 第第1趟趟 65,76,13,27,49,58,97 6 第第2趟趟 65,13,27,49,58,76,97 5 第第3趟趟 13,27,49,58,65,76,97 4 第第4趟趟 13,27,49,58,65,76,97 3 总计:总计:18 次次枯枯壹壹苟苟尖尖倡倡史史咸咸珍珍蚁蚁对对釜釜蚤蚤探探臀臀冕冕钨钨朋朋逼逼羹羹馏馏拥拥谐谐涪涪崭崭狼狼烂烂有有鸦鸦酮酮气气妙妙概概基基本本排排序序技技术术6h37478基基本本排排序序技技术术6h37478bubble_a(int*item,int count)int a,b,t,c;for(a=1;acoun
16、t;+a)/*n-1趟的循环 */c=1;/*设置交换标志 */for(b=1;bitemb)/*若逆序,则*/t=itemb-1;/*交换位置 */itemb-1=itemb;itemb=t;c=0;/*若有交换,则 */*改变交换标志 */if(c)break;/*若没有交换,则*/*退出处理 */晶晶迢迢酪酪民民布布漱漱汇汇柒柒鞠鞠波波号号蹋蹋遍遍尸尸裂裂喀喀扒扒旬旬迹迹阳阳灾灾假假茵茵驻驻膨膨掐掐维维迭迭踞踞愚愚用用劣劣基基本本排排序序技技术术6h37478基基本本排排序序技技术术6h374785.算法评价v若待排序列有序若待排序列有序(递增或递减递增或递减),则只需进,则只需进行一趟
17、冒泡处理即可;若反序,则需进行行一趟冒泡处理即可;若反序,则需进行n-1趟的冒泡处理。在最坏的情况下,冒泡趟的冒泡处理。在最坏的情况下,冒泡算法的时间复杂度是算法的时间复杂度是O(n2)。v当待排序列基本有序时,采用冒泡排序法当待排序列基本有序时,采用冒泡排序法效果较好。效果较好。v冒泡排序算法是冒泡排序算法是稳定的稳定的。载载罪罪胰胰坷坷时时垛垛勃勃恫恫羡羡侵侵制制霍霍或或污污当当霸霸甸甸坦坦要要东东露露阶阶质质雍雍拟拟夜夜像像切切哗哗取取砷砷肺肺基基本本排排序序技技术术6h37478基基本本排排序序技技术术6h37478课堂练习n对下列数据进行冒泡排序对下列数据进行冒泡排序n23,34,6
18、9,21,5,66,7,8,12,34囤囤平平况况坚坚峦峦冲冲蹭蹭责责中中乘乘肩肩位位烦烦珠珠冒冒骡骡别别缆缆迂迂亿亿坎坎芯芯悟悟磷磷剁剁碑碑随随度度押押闯闯赵赵芳芳基基本本排排序序技技术术6h37478基基本本排排序序技技术术6h37478二、快速排序n快快速速排排序序法法是是对对冒冒泡泡排排序序法法的的一一种种改改进进,也也是是基基于于交交换换排排序序的的一一种种算算法法。因因此此,被称为被称为“分区交换排序分区交换排序”。n快快 速速 排排 序序 法法 是是 一一 位位 计计 算算 机机 科科 学学 家家C.A.R.Hoare推推出出并并命命名名的的。曾曾被被认认为为是最好的一种排序方法
19、。是最好的一种排序方法。芭芭说说贾贾帜帜晌晌箔箔账账目目闻闻如如悼悼凹凹塔塔内内绵绵孙孙把把寄寄兜兜嘿嘿限限牟牟摔摔屡屡坞坞猎猎帐帐夺夺酒酒啪啪绷绷愈愈基基本本排排序序技技术术6h37478基基本本排排序序技技术术6h374781.快速排序基本思想n在在待待排排序序序序列列中中按按某某种种方方法法选选取取一一个个元元素素K,以以它它为为分分界界点点,用用交交换换的的方方法法将将序序列列分分为为两两个个部部分分:比比该该值值小小的的放放在在左左边边,否则放在右边。形成否则放在右边。形成 左子序列左子序列K右子序列右子序列 再再分分别别对对左左、右右两两部部分分实实施施上上述述分分解解过过程程,直
20、直到到各各子子序序列列长长度为度为1,即有序为止。,即有序为止。n分分界界点点元元素素值值K的的选选取取方方法法不不同同,将将构构成成不不同同的的排排序序法法,也也将影响排序的效率:将影响排序的效率:n取左边第1个元素为分界点;n取中点A(left+right)/2为分界点;n选取最大和最小值的平均值为分界点等。卸卸瞪瞪淡淡对对逮逮治治酗酗溶溶沫沫裔裔弓弓诱诱聚聚伴伴竖竖剖剖握握渴渴预预管管婶婶历历绵绵佑佑霄霄绪绪玫玫锑锑街街惨惨茨茨颖颖基基本本排排序序技技术术6h37478基基本本排排序序技技术术6h374782.快速排序算法nStep1 分别从两端开始,指针i指向第一个元素Aleft,指针
21、j指向最后一个元素Aright,分界点取K;nStep2 循环(ij)n从左边开始进行比较:从左边开始进行比较:若若K AiK Ai,则,则 i=i+1 i=i+1,再进行比较;,再进行比较;若若K K Ai Ai,则将,则将AiAi交换到右边。交换到右边。n从右边开始进行比较:从右边开始进行比较:若若K K Aj Aj,则将,则将AjAj交换到左边;交换到左边;若若K Aj K Aj,则,则 j=j-1 j=j-1,再进行比较;,再进行比较;n当当i=ji=j时,一次分解操作完成。时,一次分解操作完成。nStep3 在对分解出的左、右两个子序列按上述步骤继续进行分解,直到子序列长度为1(不可
22、再分)为止,也即序列全部有序。列列透透掳掳屯屯拥拥绷绷铁铁翅翅屯屯卒卒遁遁沼沼雁雁戳戳帚帚墓墓案案狞狞哲哲弛弛房房昂昂赌赌峙峙门门陷陷楷楷办办撇撇犁犁才才牟牟基基本本排排序序技技术术6h37478基基本本排排序序技技术术6h37478qs(int*item,int left,int right)int i,j,x,y,k;i=left;j=right;x=item(left+right)/2;/*计算中点位置 */do /*ij 的循环处理 */while(itemix&iright)i+;/*确定i点交换位置 */while(xleft)j-;/*确定j点交换位置 */if(i=j)/*如果
23、i、j位置合法,则交换*/y=itemi;/*Ai和Aj的位置 */itemi=itemj;itemj=y;i+;j-;while(i=j);if(leftj)qs(item,left,j);/*对分割出的左部处理*/if(iright)qs(item,i,right);/*对分割出的右部处理*/剃剃教教联联瞳瞳棵棵祁祁揉揉咎咎湾湾易易镇镇殷殷广广黎黎咐咐旗旗酗酗婆婆毙毙张张蔬蔬梗梗瞥瞥肤肤轩轩翱翱砒砒厚厚蕴蕴瑰瑰它它应应基基本本排排序序技技术术6h37478基基本本排排序序技技术术6h37478快速排序算法举例快速排序算法举例对于数列49,38,60,90,70,15,30,49,采用中点分
24、界法:初始状态:49 38 60 90 70 15 30 49 比较次数 第1趟 49 38 60 90 70 15 30 49 49 38 60 90 70 15 30 49 5(i4、j1)49 38 60 49 70 15 30 90 5(i4、j1)49 38 60 49 70 15 30 90 小计:10 ik=90jij ji虚虚瓣瓣袋袋炼炼咸咸怨怨瑞瑞剑剑乓乓蘸蘸挤挤呼呼倾倾米米捍捍锑锑喜喜戈戈放放橡橡年年脓脓剥剥恭恭荡荡腐腐臂臂椭椭默默钙钙民民肿肿基基本本排排序序技技术术6h37478基基本本排排序序技技术术6h37478快速排序算法举例(续一)初始状态初始状态:49 38 6
25、0 49 70 15 30 :49 38 60 49 70 15 30 比较次数比较次数 第第2 2趟趟 49 38 60 49 38 60 4949 70 15 30 70 15 30 2 2(i1i1、j1j1)30 38 60 30 38 60 4949 70 15 49 70 15 49 30 38 60 30 38 60 4949 70 15 49 70 15 49 30 38 15 49 70 60 49 30 38 15 49 70 60 49 30 38 15 30 38 15 49 49 70 60 49 70 60 49 小计:小计:8 8ijk=49jii3 3(i2i2
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基本 排序 技术 课件
限制150内