数据结构排序选择排序归并排序基数排序学习教案.pptx
《数据结构排序选择排序归并排序基数排序学习教案.pptx》由会员分享,可在线阅读,更多相关《数据结构排序选择排序归并排序基数排序学习教案.pptx(70页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、会计学1数据结构排序数据结构排序(pi x)选择排序选择排序(pi x)归并排序归并排序(pi x)基数排序基数排序(pi x)第一页,共70页。第第1010章章 内部内部(nib)(nib)排序排序选择(xunz)排序(直接排序、堆排序)概述(ish)插入排序(直接排序、折半排序、希尔排序)交换排序(冒泡排序、快速排序)归并排序基数排序第1页/共70页第二页,共70页。v选择(xunz)排序10.4 选择选择(xunz)排排序序基本思想:第i趟在n-i+1(i=1,2,n-1)个记录中选取(xunq)关键字最小的记录作为有序序列中的第i个记录。1.简单选择排序2.树形选择排序3.堆排序第2页
2、/共70页第三页,共70页。v简单选择(xunz)排序10.4 选择选择(xunz)排排序序排序过程:首先(shuxin)通过n1次关键字比较,从n个记录中找出关键字最小的记录,将它与第一个记录交换。再通过n2次比较,从剩余的n1个记录中找出关键字次小的记录,将它与第二个记录交换。重复上述操作,共进行n1趟排序后,排序结束。第3页/共70页第四页,共70页。v简单(jindn)选择排序10.4 选择选择(xunz)排排序序例:初始(chsh):49386597761327jjjjjjki=11349一趟:13386597764927i=2二趟:13276597764938三趟:13273897
3、764965四趟:13273849769765五趟:13273849659776六趟:13273849657697排序结束:六趟:13273849657697kki=6i=3i=4i=5比较次数n-1n-2n-6第4页/共70页第五页,共70页。v简单选择排序(pix)算法描述10.4 选择选择(xunz)排排序序voidSelectSort(SqList&L)/对顺序表L作简单(jindn)选择排序for(i=1;iL.length;+i)k=i;for(j=i+1;j=n;j+)if(L.rj.keyL.rk.key)k=j;if(i!=k)L.riL.rk;/与第i个记录交换/Selec
4、tSort第5页/共70页第六页,共70页。v简单选择排序算法(sunf)分析10.4 选择选择(xunz)排排序序由于存在着不相邻元素之间的互换,因此,简单选择排序(pix)是“不稳定的”。算法实现共需要进行n-1次选择,每次选择需要进行n-i次比较(1in-1),而每次交换最多需3次移动,因此,总的比较次数C=n(n-1)/2,总的移动次数M=3(n-1)。故其时间复杂度为O(n2)。空间效率:O(1)交换时用到一个暂存单元第6页/共70页第七页,共70页。v树形选择(xunz)排序(又称锦标赛排序)10.4 选择选择(xunz)排排序序基本思想:与体育比赛时的淘汰赛类似。首先对n个记录的
5、关键字进行两两比较(bjio),得到n/2个优胜者(关键字小者),作为第一步比较(bjio)的结果保留下来。然后在这n/2个较小者之间再进行两两比较(bjio),如此重复,直到选出最小关键字的记录为止。例:关键字序列T=(21,25,49,25*,16,08,63),请给出锦标赛排序的具体实现过程。第7页/共70页第八页,共70页。08Winner(胜者)2108086325*2121254925*160863r1注:为便于自动处理,建议每个记录多开两个(lin)特殊分量:keyotherinfoIndex(结点位置编号)结点位置编号)Tag(是否参加比较)(是否参加比较)初态补足2k(k=l
6、og2n)个叶子(yzi)结点第一趟:第一趟:Tree8Tree9Tree10Tree11Tree12Tree13Tree14Tree15第8页/共70页第九页,共70页。第二趟:第二趟:082108086325*2121254925*160863161616r2Winner(胜者)求次小值16时,只需比较(bjio)2次,即只比较(bjio)log2n-1次。令其Tag0,不参与(cny)比较第9页/共70页第十页,共70页。令其Tag0,不参与(cny)比较第三第三(d(d sn)sn)趟:趟:162116166325*2121254925*160863r3Winner(胜者)6321第1
7、0页/共70页第十一页,共70页。082108086325*2121254925*1608636321第四趟:第四趟:r4Winner(胜者)252525第11页/共70页第十二页,共70页。082108086325*2121254925*1608631616166321252525第五第五(d(d w w)趟:趟:r5Winner(胜者)25*25*第12页/共70页第十三页,共70页。082108086325*2121254925*160863161616632125252525*25*第六趟:第六趟:r6Winner(胜者)494949第13页/共70页第十四页,共70页。0821080
8、86325*2121254925*160863161616632125252525*25*494949第七趟:第七趟:r7Winner(胜者)63第14页/共70页第十五页,共70页。v树形选择排序(pix)算法10.4 选择选择(xunz)排排序序胜者树数据(shj)结点类的定义DataNodeTypedata;/数据值intindex;/结点在满二叉树中顺序号intactive;/参选标志:=1,参选,=0,不参选第15页/共70页第十六页,共70页。锦标赛排序的算法voidTournamentSort(Typea,intn)intbottomRowSize=PowerOfTwo(n);/
9、乘幂值计算满足n的2的最小次幂的数intTreeSize=2*bottomRowSize-1;/总结点个数intloadindex=bottomRowSize-1;/内结点个数DataNodetreeTreeSize;intj=0;/从a向胜者树外结点复制数据for(inti=loadindex;iTreeSize;i+)treei.index=i;if(jn)treei.active=1;treei.data=aj+;elsetreei.active=0;i=loadindex;/进行初始比较选择最小的项while(i)j=i;while(j2*i)if(!treej+1.active|tr
10、eej.datatreej+1.data)/胜者送入双亲(shungqn)tree(j-1)/2=treej;elsetree(j-1)/2=treej+1;j+=2;i=(i-1)/2;/i退到双亲(shungqn),直到i=0为止for(i=0;in-1;i+)/处理其它n-1个数据ai=tree0.data;/送出最小数据treetree0.index.active=0;/失去(shq)参选资格UpdateTree(tree,tree0.index);/调整an-1=tree0.data;/TournamentSort第16页/共70页第十七页,共70页。锦标赛排序中的调整算法voidU
11、pdateTree(DataNode*tree,inti)if(i%2=0)tree(i-1)/2=treei-1;/i偶数(ush),对手左结点elsetree(i-1)/2=treei+1;/i奇数,对手右结点i=(i-1)/2;/向上调整while(i)/直到i=0if(i%2=0)j=i-1;elsej=i+1;if(!treei.active|!treej.active)if(treei.active)tree(i-1)/2=treei;/i可参选,i上elsetree(i-1)/2=treej;/否则,j上else/两方都可参选if(treei.datatreej.data)tre
12、e(i-1)/2=treei;/关键码小者上elsetree(i-1)/2=treej;i=(i-1)/2;/i上升到双亲第17页/共70页第十八页,共70页。v树形选择排序算法(sunf)分析10.4 选择选择(xunz)排排序序锦标赛排序构成的树是满(完全)二叉树,其深度为log2n+1,其中(qzhng)n为待排序元素个数。时间复杂度:O(nlog2n)n个记录各自比较约log2n次空间效率:O(n)胜者树的附加内结点共有n-1个!稳定性:稳定左右结点相同者左为先n=2k=叶子总数第18页/共70页第十九页,共70页。v堆排序10.4 选择选择(xunz)排排序序1.什么(shnme)是
13、堆?堆的定义:设有n个元素的序列(xli)k1,k2,kn,当且仅当满足下述关系之一时,称之为堆。kik2ikik2i+1ki k2ikik2i+1或者i=1,2,n/22.怎样建堆?3.怎样堆排序?解释:如果让满足以上条件的元素序列(k1,k2,kn)顺次排成一棵完全二叉树,则此树的特点是:树中所有结点的值均大于(或小于)其左右孩子,此树的根结点(即堆顶)必最大(或最小)。第19页/共70页第二十页,共70页。v堆排序10.4 选择选择(xunz)排排序序082546495867234561(大根堆)918566765867234561557例:有序列T1=(08,25,49,46,58,6
14、7)和序列T2=(91,85,76,66,58,67,55),判断它们(tmen)是否“堆”?(小根堆)(小顶堆)(最小堆)(大顶堆)(最大堆)第20页/共70页第二十一页,共70页。v怎样(znyng)建堆?10.4 选择选择(xunz)排排序序将排序码k1,k2,k3,kn表示成一棵完全二叉树,然后从第n/2个排序码(即最右边的非终端结点)开始筛选,使由该结点作为根结点组成(zchn)的子二叉树符合堆的定义,然后从第n/2-1个排序码重复刚才操作,直到第一个排序码(即根)止。这时候,该二叉树符合堆的定义,初始堆已经建立。第21页/共70页第二十二页,共70页。v怎样(znyng)建堆?10
15、.4 选择选择(xunz)排排序序212525491608123456例:关键字序列(xli)T=(21,25,49,25,16,08),请建大根堆为便于理解,先将原始序列画成完全二叉树的形式21i=3:49而且21还应当向下比较!i=1:21小于25和49,要调整!49大于08,不必调整;i=2:25大于等于25和16,不必调整;完全二叉树的最右一个非终端结点编号必为n/2!(性质5)注:终端结点(即叶子)没有任何子女,无需单独调整。第22页/共70页第二十三页,共70页。v怎样(znyng)建堆?10.4 选择选择(xunz)排排序序这个(zhge)自堆顶至叶子的调整过程称为“筛选”。筛选
16、:假若完全二叉树的某一个结点i,它的左、右子树已是堆。需要将R2i.key与R2i+1.key之中的最小者与Ri.key比较,若Ri.key较大则交换,这有可能破坏下一级堆。于是继续采用上述方法构造下一级堆,直到完全二叉树中结点i构成堆为止。第23页/共70页第二十四页,共70页。v怎样(znyng)建堆?10.4 选择选择(xunz)排排序序第24页/共70页第二十五页,共70页。v怎样(znyng)建堆?10.4 选择选择(xunz)排排序序voidHeapAdjust(SqListH,ints,intm)/已知H.rs.m中记录的关键字除H.rs.key之外均满足堆的定义,/本函数调整H
17、.rs的关键字,使H.rs.m成为一个大顶堆rc=H.rs;for(j=2*s;j=m;j*=2)/沿key较大的孩子结点向下筛选,j为key较大的记录的下标if(j0;-i)/把H.r1.length建成大顶堆HeapAdjust(H,i,H.length);for(i=H.length;i1;-i)/将堆顶记录和当前(dngqin)未经排/序子序列H.r.1.i中最后一个记录相互交换H.r1H.ri;HeapAdjust(H,1,i-1);/将H.R1.i-1重新调整为大顶堆/HeapSort第32页/共70页第三十三页,共70页。v附1:基于初始堆进行堆排序的算法(sunf)步骤10.4
18、 选择选择(xunz)排排序序1.堆的第一个对象V0具有最大的关键码,将V0与Vn对调,把具有最大关键码的对象交换到最后,再对前面的n-1个对象,使用堆的调整算法,重新建立堆。结果(jigu)具有次最大关键码的对象又上浮到堆顶,即V0位置。2.再对调V0和Vn-1,调用对前n-2个对象重新调整,如此反复,最后得到全部排序好的对象序列。第33页/共70页第三十四页,共70页。rc=H.rs;j=2s;jm&H.rj.keyH.rj+1.key+j;/指向右兄弟jH.rj.keyH.rs=H.rj;s=j;j=2*j;/指向左孩子NNNYYYH.rsm中除rs外,其他具有堆特征现调整rs的值,使H
19、.rsm为堆附附2 2:算法算法(sunf)(sunf)流程流程比较左右孩子大小(dxio),j指向大者比较(bjio)大孩子与rc的大小若大向上浮第34页/共70页第三十五页,共70页。v堆排序的效率(xiol)分析10.4 选择选择(xunz)排排序序在整个堆排序中,共需要进行n+n/2-1次筛选运算(ynsun),每次筛选运算(ynsun)进行双亲和孩子或兄弟结点的排序码的比较和移动次数都不会超过完全二叉树的深度。故每次筛选运算(ynsun)的时间复杂度为O(log2n),则整个堆排序过程的时间复杂度为O(nlog2n)。堆排序在最坏情况下,时间复杂度也为O(nlog2n)。相对于快速排
20、序,这是堆排序的最大优点。此外,堆排序仅需一个记录大小辅助存储空间供交换使用。由于存在着不相邻元素之间的互换,因此,堆排序是一种不稳定的排序方法。第35页/共70页第三十六页,共70页。v堆排序的效率(xiol)分析10.4 选择选择(xunz)排排序序时间效率:O(nlog2n)。因为整个排序过程(guchng)中需要调用n-1次HeapAdjust()算法,HeapAdjust()而算法本身耗时为log2n;空间效率:O(1)。仅在第二个for循环中交换记录时用到一个临时变量temp。稳定性:不稳定。优点:对少量数据效果不明显,但对大量数据有效。第36页/共70页第三十七页,共70页。v归
21、并(gubng)排序10.5 归并归并(gubng)排排序序归并排序的基本思想是:将两个(或以上)的有序表组成新的有序表。更实际的意义:可以把一个长度(chngd)为n的无序序列看成是n个长度(chngd)为1的有序子序列,首先做两两归并,得到n/2个长度(chngd)为2的子序列;再做两两归并,如此重复,直到最后得到一个长度(chngd)为n的有序序列。第37页/共70页第三十八页,共70页。v归并(gubng)排序10.5 归并归并(gubng)排排序序初始(chsh)关键字:49386597761327一趟归并后:38496597137627二趟归并后:38496597132776三趟归
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 排序 选择 归并 基数排序 学习 教案
限制150内