当前位置:文档之家› 数据结构-多关键字排序课设报告

数据结构-多关键字排序课设报告

目录
一.设计题目 (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 数据进行冒泡法排序 "<<endl <<" 2.对数据进行基数排序 "<<endl <<"#################################################"<<endl;
do
{
cin>>b;
if(b==1)
{
cout<<setw(8)<<"语文"<<setw(8)<<"数学"<<setw(8)<<"英语"<<setw(8)<<"体育"<<setw(8)<<"综合"<<endl; BubbleSort(L); 码设计分析 看到题目“多关键字排序”后,首先对课本的第十章所有的算法复习了一遍并对所有的排序方法进行了总结。

内部排序法可详细的分为:插入排序(直接插入排序),快速排序,选择排序(简单选择排序),归并排序,冒泡排序,希尔排序,堆排序,基数排序。

通过对算法的分析。

可将这些排序方法分为稳定排序和不稳定排序。

其中不稳定排序包括快速排序和堆排序,其余都为稳定排序方法。

故基于对算法的时间空间复杂度和熟练程度,稳定的内部排序法,我选择了冒泡排序法。

由于待排序的记录序列可有3种存储方式:顺序存储,链表存储和地址存储。

考虑到算法的执行效率和当前能力,我选择了第二种记录序列的存储方式。

故确定了排序方法和记录的存储方式后,开始设计代码。

程序的重要设计模块为:结构体定义,算法设计,界面设计和主函数的定义。

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;
数据进行冒泡法排序
"<<endl
<<" 2.对数据进行基数排序 "<<endl
<<"#################################################"<<endl;
do
{
cin>>b;
if(b==1)
{
cout<<setw(8)<<"语文"<<setw(8)<<"数学"<<setw(8)<<"英语"<<setw(8)<<"体育"<<setw(8)<<"综合"<<endl;
BubbleSort(L); 据结构(c语言版)严蔚敏吴伟民编著。

相关主题