数据结构-多关键字排序课设报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录
一.设计题目 (2)
二.需求分析 (2)
1.程序设计问题描述 (2)
2.基本要求 (2)
3.流程图 (2)
三.详细设计 (3)
1.数据结构定义 (4)
2.主要算法设计 (5)
3.函数调用关系图 (8)
4.程序主要流程 (8)
四.调试分析 (13)
五.用户手册 (15)
六.测试结果 (19)
七.源代码(带注释) (21)
八.参考文献 (26)
一.设计题目
多关键字排序
二.需求分析
1.程序设计问题描述
多关键字的排序有其一定的实用范围。例如:在进行高考分数处理时,除了需对总分进行排序外,不同的专业对单科分数的要求不同,因此尚需在总分相同的情况下,按用户提出的单科分数的次序要求排出考生录取的次序。
2.基本要求
(1)假设待排序的记录数不超过10000,表中记录的关键字数不超过5,各个关键字的范围均为0至100。按用户给定的进行排序的关键字的优先关系,输出排序结果。
(2)约定按LSD法进行多关键字的排序。在对各个关键字进行排序时采用两种策略:其一是利用稳定的内部排序法,其二是利用"分配"和"收集"的方法。并综合比较这两种策略。
(3)测试数据由随机数生成器产生。
3.流程图
三.详细设计
本程序是对语文,数学,英语,体育,综合这5门成绩按照此顺序进行优先排序。各科分数为0~100。
由于本实验约定按LSD进行多关键字的排序。在对个关键字进行排序时采用两种策略:其一是利用稳定的内部排序法,其二是利用“分配”和“收集”的方法。所以在一个程序里实现了这两种排序方法。
第一种排序方法由于要使用稳定的排序方法,故参考书上的几种排序方法后,选用了冒泡排序和静态链表存储方式,每一趟排序后,找出最高分。第二种排序方法利用“分配”与“收集”的基数排序算法,用静态链表存储分数,在一趟排序中,将结点分配到相应的链
队列中去,再按从高到低链接起来。
1.数据结构设计
(1)稳定的内部排序法
结构体定义 typedef struct node 机产生数据:输入想要排序的学生成绩记录数并随机产生成绩: typedef struct node 数据进行冒泡法排序 "< do { cin>>b; if(b==1) { cout< 2.调试过程中的问题 (1)在基数排序中,输入2后一直无显示,如下图所示: 经调试检查后发现是因为排序完一条记录后,没有将指针指向下一条记录。所以在while ()循环结束处添加一条指向下一条记录第指针p=p->next; 如下代码所示: while(p) { if(d==1) m=p->key[n]%10; else m=p->key[n]/10; if(head[m]==NULL) { void main() Menu() BubbleSort(L) PrintScore(L) RandData(L,n) RadixSort(L) PrintScore(L ) 调用 If (b=1)调用 If (b=2)调用 调用 head[m]=p; tail[m]=p; } else { tail[m]->next=p; tail[m]=p; } p=p->next; 数据进行冒泡法排序 "< <<" 2.对数据进行基数排序 "< <<"#################################################"< do { cin>>b; if(b==1) { cout< BubbleSort(L); 据结构(c语言版)严蔚敏吴伟民编著