攀枝花学院本科学生课程设计任务书
题 目 排序综合
1、课程设计的目的
1) 使学生进一步理解和掌握课堂上所学各种基本抽象数据类型的逻辑结构、存储结构和操
作实现算法,以及它们在程序中的使用方法。
2) 使学生掌握软件设计的基本内容和设计方法,并培养学生进行规范化软件设计的能力。
3) 使学生掌握使用各种计算机资料和有关参考资料,提高学生进行程序设计的基本能力。
2、课程设计的内容和要求(包括原始数据、技术要求、工作要求等)
[问题描述]:用程序实现多种排序算法
[基本要求]:利用随机函数产生 N 个随机整数(20000 以上),对这些数进行多种方法
进行排序。要求:
1) 至少采用三种方法实现上述问题求解(提示,可采用的方法有插入排序、希尔排序、
起泡排序、快速排序、选择排序、堆排序、归并排序)。并把排序后的结果保存在
不同的文件中。
2) 统计每一种排序方法的性能(以上机运行程序所花费的时间为准进行对比),找出
其中两种较快的方法。
如果采用 4 种或 4 种以上的方法者,可适当加分。
3、主要参考文献
[1]刘大有等,《数据结构》(C 语言版),高等教育出版社
[2]严蔚敏等,《数据结构》(C 语言版),清华大学出版社
[3]William Ford,William Topp,《Data Structure with C++》清华大学出版社
[4]苏仕华等,数据结构课程设计,机械工业出版社
4、课程设计工作进度计划
完成方案设计与程序框图
第 1 天
第 2、3 天 编写程序代码
第 4 天
第 5 天
程序调试分析和结果
课程设计报告和总结
指导教师(签字)
教研室意见:
学生(签字):
注:任务书由指导教师填写。
日期
年
月
日
年
月
日
接受任务时间: 年 月 日
评分项目
01 学习态度
02 科学实践、调研
03 课题工作量
04 综合运用知识的能力
05 应用文献的能力
06 设计(实验)能力,方案的
设计能力
07 计算及计算机应用能力
08
对计算或实验结果的分析
能力(综合分析能力、技术
经济分析能力)
09 插图(或图纸)质量、篇幅、
设计(论文)规范化程度
6
7
7
10
5
5
5
10
5
10 设计说明书(论文)质量 30
工
作
表
现
20%
能
力
水
平
35%
成
果
质
量
45%
遵守各项纪律,工作刻苦努力,具有良好的科学工
作态度。
通过实验、试验、查阅文献、深入生产实践等渠道
获取与课程设计有关的材料。
按期圆满完成规定的任务,工作量饱满。
能运用所学知识和技能去发现与解决实际问题,能
正确处理实验数据,能对课题进行理论分析,得出
有价值的结论。
能独立查阅相关文献和从事其他调研;能提出并较
好地论述课题的实施方案;有收集、加工各种信息
及获取新知识的能力。
能正确设计实验方案,独立进行装置安装、调试、
操作等实验工作,数据正确、可靠;研究思路清晰、
完整。
具有较强的数据运算与处理能力;能运用计算机进
行资料搜集、加工、处理和辅助设计等。
具有较强的数据收集、分析、处理、综合的能力。
符合本专业相关规范或规定要求;规范化符合本文
件第五条要求。
综述简练完整,有见解;立论正确,论述充分,结
论严谨合理;实验正确,分析处理科学。
题目名称
课程设计(论文)指导教师成绩评定表
排序综合
分
值
得
分
评价内涵
11 创新
10
对前人工作有改进或突破,或有独特见解。
成绩
指
导
教
师
评
语
指导教师签名:
年 月 日
2
摘要
排序(sorting)是计算机程序设计的一种重要操作,他的功能
是将一个数据元素(或记录)的任意序列,重新排列一个按关键字有
序的序列。由于待排序的记录数量不同,使得排序过程中涉及的储存
器不同,可将排序方法分为两大类:一类是内部排序,指的是待排序
记录存放在计算机随机储存器中进行的排序过程;另一类是外部排序,
指的是待排序记录的数量很大,以致内存一次不能容纳全部记录,在
排序过程中尚需对外存进行访问的排序过程。
内部排序又分为:插入排序、快速排序、选择排序、归并排序
和基数排序。其中插入排序又分为:直接插入排序、其他插入排序和
希尔排序;选择排序分为:简单选择排序、树形选择排序和堆排序;
基数排序又分为:多关键字的排序和链式基数排序。
本次课程设计就是内部排序中的几个排序方法。
关键字: 内部排序 关键字 重新排列
3
一、方案设计
(1)、程序的模块
1、输入
2、选择
3、输出
(2)、模块的功能
1、输入模块的功能:利用随机函数产生 N 个数(超过 20000),由于产生的
数较多,不好查看排序后的顺序是否正确,所以在本程序中只随机产生 20 个数。
create(a,b,&n) 是一个随机函数,它可以随机产生 20 个随机数 。
2、选择模块的功能:选择数字则进行对应的排序;选择字母则进行重新产
生随机数和退出的操作。
1————插入排序————insertsort(a,n)
2————希尔排序————xiersort(a,n)
3————冒泡排序————maopaosort(a,n)
4————快速排序————quicksort(a,1,n)
5————简单排序————jiandansort(a,n)
6————堆排序—————duisort(a,n)
C(c)———重新产生 20 个随机数——create(a,b,&n)
N(n)———退出程序
3、输出模块的功能:把利用各种排序方法排好顺序的数输出到一个文件夹
中。
writefile1(a,n)———向指定的文件中写入排序前的数
writefile2(a,n)———向指定的文件中写入用各种排序方法排好序的数
4
二、程序操作过程图
开始
利用随机函数产
生 20 个随机数
输 入数 字, 选
择排序方法
1
插 入
排 序
2
希 尔
排 序
3
冒 泡
排序
4
快 速
排序
5
简 单
排序
6
堆
排序
把利用排序方法排好序的数
输出到指定的文件夹
输入字母,选择重
新置数或者是退出
C(c)
退出
N(n)
重 新 产
生 随 机
数
5
三、程序流程图
开始
利用随机函数产
生 20 个随机数
输入数字或者字母,选
择排序方法或其他
1
插 入
排 序
2
希 尔
排 序
3
冒 泡
排序
4
快 速
排序
5
简 单
排序
N(n)
退
出
6
堆
排
序
C(c)
重 新
产 生
随 机
数
把用各种排序方法排
好的数的顺序输出到
指定的文件夹中
6
四、程序源代码
#include
#include
#include
#define M
20
/*****把排序之前的数输入到指定文件夹中*****/
Void
writefile1(int *a,int n)
{ FILE *fp;
int i;
char filename[10];
printf("请输入要输出的文件名称(包括后缀名):\n");
gets(filename);
if((fp=fopen(filename,"w"))==NULL)
fprintf("不能打开文件!\n");
fprintf("排序之前 :*****\n");
for(i=1;i<=n;i++)
fprintf(" %3d",a[i]);
}
/*****把用各种排序方法排序后的数输入到指定文件夹中*****/
void
writefile2(int *a,int n)
{ FILE *fp;
int i;
char filename[10];
fprintf("请输入要输出的文件名称(包括后缀名):\n");
gets(filename);
if((fp=fopen(filename,"w"))==NULL)
fprintf("不能打开文件!\n");
7
printf("排序之后 :*****\n");
for(i=1;i<=n;i++)
printf(" %3d",a[i]);
a[0]=-1;
}
/*******用随机函数产生 20 个随机数*******/
void create(int *a,int *b,int
*n)
{
int i,;
srand((unsigned)time(NULL));
for(i=0;i