第9章内部排序_第1页
第9章内部排序_第2页
第9章内部排序_第3页
第9章内部排序_第4页
第9章内部排序_第5页
已阅读5页,还剩85页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、按排序的规则不同,可分为按排序的规则不同,可分为5类:类:插入排序插入排序交换排序(重点是快速排序)交换排序(重点是快速排序)选择排序选择排序归并排序归并排序基数排序基数排序d关键字的位数关键字的位数(长度长度)按排序算法的时间复杂度不同,可分为按排序算法的时间复杂度不同,可分为3类:类:简单的排序算法:时间效率低,简单的排序算法:时间效率低,O(n2)先进的排序算法先进的排序算法: 时间效率高,时间效率高,O( nlog2n )基数排序算算法:时间效率高,基数排序算算法:时间效率高,O( dn)* *表示后一个表示后一个25250 1 2 3 4 5 6252525494949252525*

2、 * *161616080808解:解:假设该序列已存入一维数组假设该序列已存入一维数组V7V7中,将中,将V0V0作为缓冲或作为缓冲或暂存单元(暂存单元(TempTemp)。则程序执行过程为:)。则程序执行过程为:初态:初态:111122142221nininnniRMNnnniKCN/)()( ,/)(22参见教材参见教材P272P272经验公式经验公式dkdk值依次装在值依次装在dltadltat t 中中11111233121nininninRMNnninKCN)()()()(见教材见教材P276/长度长度1/对顺序表对顺序表L中的子序列中的子序列r lowhigh 作快速排序作快速排

3、序/一趟快排,将一趟快排,将r 一分为二一分为二/在左子区间进行递归快排,直到长度为在左子区间进行递归快排,直到长度为1/在右子区间进行递归快排,直到长度为在右子区间进行递归快排,直到长度为1/QSort新的新的low 1, L.length Void SelectSort(SqList &L ) for (i=1; i0; - - i ) HeapAdjust(r, i, length ); 这是针对结点这是针对结点 i 的堆调整函数,其含义是:的堆调整函数,其含义是:从结点从结点i i开开始到始到堆尾堆尾为止,自上向下比较,如果子女的值大于双为止,自上向下比较,如果子女的值大于双亲结点的值

4、,则互相交换,即把局部调整为大根堆。亲结点的值,则互相交换,即把局部调整为大根堆。 /temp是根,是根,child是其左孩子是其左孩子 /检查是否到达当前堆尾检查是否到达当前堆尾 /让让child指向两子女中的大者指向两子女中的大者 /根大则不必调整,结束整个函数根大则不必调整,结束整个函数 /否则子女中的大者上移否则子女中的大者上移/ /直到自下而上都满足堆定义,再安置直到自下而上都满足堆定义,再安置老老根根/将根下降到子女位置将根下降到子女位置123456136542123456136542123456136542123456136542123456136542这是针对结点这是针对结点i

5、 i 的堆调整函数的堆调整函数(也是建堆函(也是建堆函数)数),每次调用耗时,每次调用耗时O(logO(log2 2n)n)比较左右孩比较左右孩子大小,子大小,j指指向大者向大者比较大孩子比较大孩子与与rc的大小的大小若大向上浮若大向上浮rc = H.rs; j = 2s; jm &H.rj.keyH.rj+1.key+ j; / 指向右兄弟指向右兄弟j H.rj.keyH.rs=H.rj; s=j;j=2*j; /指向左孩子指向左孩子NNNYYYH.rsm中除中除rs外,其他具有堆特征外,其他具有堆特征现调整现调整rs的值的值 ,使,使H.rsm为堆为堆HeapAdjust( )关键字序列关

6、键字序列T= (21,25,49,25*,93,62,72,08,37,16,54),请给出归并排序的具体实),请给出归并排序的具体实现过程。现过程。void (SR,&TR,i, m, n) / 将将有序的有序的SRim和和SRm+1n归并为归并为有序的有序的TRin for(k=i , j=m+1; i=m & j=n; +k ) if ( SRi= SRj )TRk=SRi+; else TRk=SRj+; / 将将SR中记录由小到大地并入中记录由小到大地并入TR if (i=m) TRkn=SRim; / 将剩余的将剩余的SRim复制到复制到TR if (j=n) TRkn=SRjn;

7、 / 将剩余的将剩余的SRjn复制到复制到TR / Merge void MSort (SR,&TR1,s, t) / 将将无序的无序的SRst归并排序为归并排序为TR1st if ( s=t )TR1s=SRs; / 当当len=1时返回时返回 else m=(s+t)/2; / 将将SR st平分为平分为SR sm和和SR m+1t MSort (SR,&TR2,s, m); / 将将SR 一分为二一分为二, 2分为分为4 / 递归地将递归地将SR sm归并为有序的归并为有序的TR2sm MSort (SR,&TR2,m+1, t ); / 递归地将递归地将SR m+1t归并为有序的归并为

8、有序的TR2m+1t (TR2, TR1, s, m, t ); / 将将TR2 sm和和TR2 m+1t归并归并到到TR1 st / MSort简言之,先由简言之,先由“长长”无序变成无序变成“短短”有序,再从有序,再从“短短”有序归并为有序归并为“长长”有序。有序。初次调用时为(初次调用时为(L, L, 1, length)因为在递归的归并排序算法中,函数因为在递归的归并排序算法中,函数Merge( )做一趟两路归并做一趟两路归并排序,需要调用排序,需要调用merge ( )函数函数 n/(2*len) O(n/len) 次,函数次,函数Merge( )调用调用Merge( )正好正好 l

9、og2n 次,而每次次,而每次merge( )要执行比要执行比较较O(len)次,所以算法总的时间复杂度为次,所以算法总的时间复杂度为O(nlog2n)。因为需要一个与原始序列同样大小的辅助序列(因为需要一个与原始序列同样大小的辅助序列(TR)。这正)。这正是此算法的缺点。是此算法的缺点。以上两例都是典型的多关键字排序!因为有分组,故此算法需递归实现。例:例:初始关键字序列初始关键字序列T=(32, 13, 27, 32*, 19,33),请分别),请分别用用MSD和和LSD进行排序,并讨论其优缺点。进行排序,并讨论其优缺点。法法1(MSD):):原始序列:原始序列:32, 13, 27, 3

10、2*, 19, 33 先按高位先按高位 排序:排序:(13, 19), 27, (32, 32*,33) 再按低位再按低位排序排序 : 13, 19 , 27, 32, 32*, 33法法2(LSD):): 原始序列:原始序列: 32, 13, 27, 32*, 19 ,33 先按低位先按低位排序:排序: 32, 32*, 13, 33, 27, 19 再按高位再按高位排序:排序: 13, 19 , 27, 32, 32*, 33无需分组,易编程实现!又称散列过程!又称散列过程!排序时经过了反复的排序时经过了反复的“分配分配”和和“收集收集”过程。当对关过程。当对关键字所有的位进行扫描排序后,

11、整个序列便从无序变为有序键字所有的位进行扫描排序后,整个序列便从无序变为有序了。了。能!能!e0 e1 e2 e3 e4 e5 e6 e7 e8 e9614738921485637101215530790306f0 f1 f2 f3 f4 f5 f6 f7 f8 f9r0f e eifi+1 530790921101614485215306637738r0e0 e1 e2 e3 e4 e5 e6 e7 e8 e9614738921485637101215530790306f0 f1 f2 f3 f4 f5 f6 f7 f8 f9530790921101614485215306637738eifi+1 530790921101614485215306637738r0r0530790921101614485215306637738e0 e1 e2 e3 e4 e5 e6 e7 e8 e9614738921485637101215530790306f0 f1 f2 f3 f4 f5 f6 f7 f8 f9eifi+1 530790921101614485215306637738r0r0ej队不空,则新元素队不空,则新元素应链到原队尾元素应链到原队尾元素之后之后P P是关键字序列是关键字序列r r 的指针分量的指针分量队首为空

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论