链式简单选择排序 数据结构课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计
题目链式简单选择排序
学院计算机科学与技术
专业计算机科学与技术
班级
姓名
指导教师
2012 年 6 月22 日
武汉理工大学《数据结构》课程设计说明书
课程设计任务书
学生姓名:专业班级:
指导教师:工作单位:计算机科学系
题目:链式简单选择排序
初始条件:
试写一个程序,以单链表作为存储结构,实现简单选择排序。
(1)待排序表的数据不得少于100项;其中的数据要用伪随机数产生程序产生;至少要用5组不同的输入数据作比较;比较的指标为有关键字参加的比较次数。
(2)在课程设计报告中应对你的算法进行时间复杂度分析;
(3)自行设计测试用例。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)
课程设计报告按学校规定格式用A4纸打印(书写),并应包含如下内容:
1. 问题描述
简述题目要解决的问题是什么。
2. 设计
存储结构设计、主要算法设计(用类C/C++语言或用框图描述)、测试用例设计;
3. 调试报告
调试过程中遇到的问题是如何解决的;对设计和编码的讨论和分析。
4. 经验和体会(包括对算法改进的设想)
5. 附源程序清单和运行结果。源程序要加注释。如果题目规定了测试数据,则运行结果要包含这些测试数据和运行输出。
说明:
1. 设计报告、程序不得相互抄袭和拷贝;若有雷同,则所有雷同者成绩均为0分。
2. 凡拷贝往年任务书或课程设计充数者,成绩一律无效,以0分记。
时间安排:
1、6月15日~6月21日完成。
2、6月22日上午和下午在实验中心检查程序、交课程设计报告、源程序(U盘)。
指导教师签名: 2012年6月14日
系主任(或责任教师)签名:年月日
武汉理工大学《数据结构》课程设计说明书
目录
1、课程设计问题描述及问题分析
1.1 课程设计问题描述
1.2 问题分析
2、课程设计要求
3、课程设计开发平台
4、程序设计
4.1 存储结构设计
4.2 主要算法设计
4.2.1 链表的尾插法创建及数据的伪随机产生
4.2.2 待排序数据的矩阵输出
4.2.3 链式简单选择排序方法
4.3 主函数算法设计
5、程序调试过程
6、运行结果及说明
6.1创建程序主界面及链表
6.2 从小到大排序及从大到小排序
6.3比较五组不同输入数据的排序
7、时间复杂度分析
8、经验与体会
9、参考文献
10、附:课程设计源程序
1、课程设计问题描述及问题分析
1.1 课程设计问题描述
试写一个程序,以单链表作为存储结构,实现对待排序表中的数据的简单选择排序,并输出排序结果
1.2 问题分析
由本次课程设计的课题内容分析可得,解决问题的实际就是要建立一个单链表,将待排序的整型数据以结点的形式存储在建立的单链表中。然后,依次对单链表中的结点数据进行简单选择排序,其中排序分为从大到小排序和从小到大排序两种方式,分别用这两种方法实现所要求的排序得到结果。
2、课程设计要求
(1)以单链表作为存储结构,实现简单选择排序。待排序的数据不得少于100
项,其中的数据要用伪随机数产生程序产生;至少要用5组不同的输入数据进行比较;比较的指标为有关键字参加的比较次数。
(2)在课程设计报告中要对所设计的算法进行时间复杂度分析。
(3)设计完成后,自行设计测试用例,要有完整的调试过程和运行结果。
3、课程设计开发平台
本课程设计需要采用支持标准C/C++的Visual C++编译器(6.0或更高版本),并采用最基础的Win32控制台程序。
4、程序设计
本程序设计基本思想是:链式简单选择排序的是每一趟在n-i+1(i=1,2,...,n-1)个记录中选取关键字最大或最小的记录作为有序序列中第i个记录。而本课程设计题目中要求以单链表为存储结构,待排序的数据由伪随机函数产生。因此,首先需要创建一个单链表,将待排序数据存储在单链表中,然后用指针实现关键字的从大到小或者从小到大的排序。
4.1存储结构设计
本课程设计要求使用线性表的链式存储结构来存储待排序的数据,而线性表的链式存储结构特点是用一组任意的可以是不连续的存储单元存储线性表的数据元素。它包括两个域:存储数据元素信息的称为数据域,存储直接后继存储位置的域称为指针域。
单链表结构体的定义如下:
typedef struct LNode
{
int key; //值域
struct LNode *next; //指针域
}Link;
其中,值域key以整型存储了所要排序的关键字值,而指针域next以指针型存储了指向下一个结点的地址。Link是定义的一个全局结构体变量,可以在下面的任何函数中调用。
4.2 主要算法设计
本课程设计的程序中主要包括:创建链表函数Create_Link(Link *),打印链表函数Print_Link(Link *),以及核心部分简单选择排序从小到大排序函数SortFromMin(Link *)以及从大到小SortFromMax(Link *)。
4.2.1链表的尾插法创建及数据的伪随机产生
在VC++中,有两个函数可以产生伪随机数,分别为rand(void)和srand(seed)。rand()产生的随机整数是在0~RAND_MAX之间平均分布的,其用法是先调用srand 函数,如srand( (unsigned)time( NULL ) )。这样可以使得每次产生的随机数序列不同。
如果计算伪随机序列的初始数值(称为种子)相同,则计算出来的伪随机序列就是完全相同的。要解决这个问题,需要在每次产生随机序列前,先指定不同的种子,这样计算出来的随机序列就不会完全相同了。以time函数值(即当前时间)作为种子数,因为两次调用rand函数的时间通常是不同的,这样就可以保证随机性了。也可以使用srand函数来人为指定种子数。
Link *Creat_Link( )