- 1、本文档共28页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C课件案例二十二基数排序的实现
案例二十二 基数排序的实现 本案例知识要点 数组的使用 链表的使用 基数排序算法 类的设计和使用 一、案例需求 案例描述 利用基数排序算法为给定的十进制整数链表编写从小到大排序的排序算法。 案例效果图 基数排序的案例效果如图所示。 基数排序案例效果图 功能说明 对无序整数链表采用基数排序算法,使整数按照从小到大的顺序排序,排序后的结果仍然保存在链表中。 二、案例分析 基数排序是按表元键值的各位值进行排序。假设有一个表元的键值为不超过三位数的整数链表,设键值形式为ABC,其中A表示键值的百位数;B表示十位数;C表示个位数。首先按个位值C对链表进行拆分和链接,将链表拆分为10个队列链表,然后根据C的值按从小到大的顺序将拆分后的10个队列链表重新收集成一个链表。依次对键值中的B和A进行同样的拆分和链接操作,最后收集起来的链表是按键值从小到大排序链接的。举例说明,有一个链表的链接次序依次为: 153 678 56 288 457 653 721 876 433 254 (1)按键值的个位拆分,得到10个队列链表,键值顺序如下。 0: 空链表 1: 721 2: 空链表 3: 153 653 433 4: 254 5: 空链表 6: 56 876 7: 457 8: 678 288 9: 空链表 顺序收集起来后,链表的键值顺序为: 721 153 653 433 254 56 876 457 678 288 (2)再按键值的十位拆分,得到10个队列链表,键值顺序如下。 0: 空链表 1: 空链表 2: 721 3: 433 4: 空链表 5: 153 653 254 56 457 6: 空链表 7: 876 678 8: 288 9: 空链表 顺序收集起来后,链表的键值顺序为: 721 433 153 653 254 56 457 876 678 288 (3)再按键值的百位拆分,得到10个队列链表,键值顺序如下。 0: 56 1: 153 2: 254 288 3: 空链表 4: 433 457 5: 空链表 6: 653 678 7: 721 8: 876 9: 空链表 顺序收集起来后,链表的键值顺序为: 56 153 254 288 433 457 653 678 721 876 这是一个按键值从小到大链接的链表。 基数排序主要包含以下的控制过程,主循环控制对键值顺序从低位到高位重复操作,在主循环内包含两个计算步骤:按键值的当前位置拆分链表为10个队列链表;将对应0~9的10个队列链表收集成一个链表。用算法形式描述其计算过程如下: 由于在拆分时,当前表元接在对应值的队列链表的末尾,因此为了便于为每个队列链表接入新表元,除每个队列链表有首指针以外,还应为每个队列链表引入末表元指针。为了能方便处理10个队列,10个队列的头和尾指针又分别构成两个指针数组。按对应值0~9的顺序将10个链表收集成一个链表,空链表除外,顺序将这些链表的首尾链接即可。另外,编写函数需要知道链表的首指针,但排序后链表中各表元的链接顺序会改变,原来的首表元可能不再是首表元,即链表的首指针也会改变,所以函数的参数应为链表首指针的指针。 1.类的设计 为了实现上述目标,首先设计一个用于基数排序的类, 取名为BaseSort。 (1)全局变量 KEYN KEYN表示待排序整数的最大长度。 (2)结构体ele 结构体ele用于形成链表以保存待排序和排序后的整数,也就是说所有 的整数都保存在ele结构体类型的链表表元中。 struct ele { int key; struct ele *link; }; (3)BaseSort类的设计 BaseSort类的结构如图所示。 ① 数据成员 m_h 用于指向链表的第一个表元。 ② 函数成员 BaseSort() 构造函数BaseSort有两个参数:一个参数a用于传递待排序的整数,这些整数开始时是保存在一个数组中的,通过BaseSort函数将它们转换成链表中的表元;另一个参数size则表示数组的大小。 ~BaseSort
文档评论(0)