数据结构PPT教学课件-第9章 排序.ppt

  1. 1、本文档共106页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第9章排序 9.2 插入排序 9.3 交换排序 9.4 选择排序 9.5 归并排序 9.6 基数排序 9.7 内部排序总结 9.8 有关排序算法的C语言源程序 9.9 多路归并用于外排序的简介 图9.13(a)是待排序的关键字序列的初始状态。  图9.13(b)是按每个关键字的个位有效数字将它们分配到相应的队列中去。 例如, 关键字008、278都分配到了8号队列中去, e[8]指向队尾, f[8]指向队头。 图9.13(c)是将6个非空队列(0号, 3号, 4号, 5号, 8号, 9号)头尾相接收集在一起之后得到的一个新的序列。  图9.13(d)是按每个关键字十位上的有效数字重新将它们分配到相应的队列中去, 例如, 关键字589、 184、 083都分配到了8号队列中去。然后再次收集, 形成如图9.13(e)所示的新的序列。  图9.13(f)则是按百位上的有效数字分配之后的各队列状态。 图9.13(g)则是再次收集后的结果, 这也是基数排序所得到的最终的有序序列。  在本章前几节的讨论中, 待排序的记录是用向量r做存储结构的。 基数排序又是“分配”队列, 又要“收集”起来, 故适用于链表形式存储。 本节不采用动态链表而仍用向量r存储(即一维数组), 让每个存放记录的数组元素增加一个指针域。此域为整型, 用来存放该 记录的下一个相邻记录所在数组元素的下标。 这种结构称为静态链表结构。所谓队列的头、尾指针也是整型, 它们记下可做某号队列队头或队尾元素的记录在数组r中的下标值。 记录结构为:  ? struct node { int key; /*关键字域*/ int oth; /*其它信息域*/ int point; /*指针域*/ } 基数排序算法: 设n个待排序的记录存储在向量r中, 限定关键字为整型并且有效数字位数d5; 基数显然是10; 10个队列的头指针、 尾指针分别用向量f和e来表示, 代表头指针的数组元素是f[0], f[1], …, f[9], 代表尾指针的数组元素分别是e[0], e[1], e[2], …, e[9], 则算法描述如下:  算法 9.14  int radixsort(struct node r[MAXSIZE],int n) { int f[10],e[10]; for (i=1;in;i++) r[i].point=i+1; r[n].point=0;p=1; /*建立静态链表, p指向链表的第一个元素 for (i=1;i=d;i++)  { /*下面是分配队列*/ for (j=0;j10;j++) {f[j]=0;e[j]=0;} while (p![KG-*2]=0) { k=yx(r[p].key,i); /*取关键字倒数第i位有效数字*/ if (f[k]==0) {f[k]=p; e[k]=p;} /*让头指针指向同一元素*/ else {l=e[k];r[l].point=p; e[k]=p;} /*在k号队列尾部入队* p=r[p].point; /*在r向量中, p指针向后移*/  } /*下面是收集*/ j=0; while (f[j]==0) j++; /*找第一个非空队列*/ p=f[j]; t=e[j]; /*p记下队头做收集后的静态链表头指针*/ while (j10)  { j++; while ((j10) (f[j]==0)) j++; if (f[j]![KG-*2]=0) {r[t].point=f[j]; t=e[j];} /*将前边一个非空队列的队尾指针指向现在队头并记下现在队尾位置*/ r[t].point=0; /*这是一趟分配与收集之后的链表最后一个元素*/ } } /* for i */ return(p); /*基数排序结果p指向静态链表的第一个元素, 即关键字最小的记录*/ } /*radixsort*/分离关键字倒数第i位有效数字算法:  算法 9.15 int yx(int m,in

文档评论(0)

***** + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档