课 程 设 计
课程设计名称:
排序综合
专 业 班 级 :
学 生 姓 名 :
学
号 :
指 导 教 师 :
课程设计时间:
2010.6.21-2010.6.25
学生姓名
题 目
课题性质
指导教师
主要内容
计算机科学与技术 专业课程设计任务书
专业班级
学号
A.工程设计
排序综合
课题来源
同组姓名
D.自拟课题
无
综合应用所学知识,设计完成一个排序综合系统。本系统拟实现以下功能:
1.直接插入排序
2.希尔排序
3.快速排序
4.堆排序
5.结果保存
6.计算排序时间
系统要求采用 VC6.0 工具进行开发实现。
综合运用和融化所学理论知识,提高分析和解决实际问题的能力,使用 c 语
任务要求
言设计一个排序综合系统。
完成课程设计报告,报告中对关键部分给出图表说明。要求格式规范,工作
量饱满。
参考文献
[1] 数据结构. 严蔚敏,吴伟民 编著. 清华大学出版社. 2007 年 03 月
[2] 数据结构、算法与应用:C++语言描术. (美)萨尼(Sahni,S.) 著,汪
诗林 等译. 机械工业出版社.2005 年 03 月
审查意见
指导教师签字:
教研室主任签字:
2010 年 6 月 24 日
说明:本表由指导教师填写,由教研室主任审核后下达给选题学生,装订在设计(论文)首页
信息科学与工程 学院课程设计成绩评价表
课程名称:数据结构课程设计
设计题目:排序
序号
评审项目
分 数
满分标准说明
1
2
3
4
5
6
7
总
分
综
合
意
见
内 容
创 新
思路清晰;语言表达准确,概念清楚,论点正确;实验方法科
学,分析归纳合理;结论严谨,设计有应用价值。任务饱满,
做了大量的工作。
内容新颖,题目能反映新技术,对前人工作有改进或突破,或
有独特见解
完整性、实用性
整体构思合理,理论依据充分,设计完整,实用性强
数据准确、可靠
数据准确,公式推导正确
规 范 性
设计格式、绘图、图纸、实验数据、标准的运用等符合有关标
准和规定
纪 律 性
能很好的遵守各项纪律,设计过程认真;
答 辩
准备工作充分,回答问题有理论依据,基本概念清楚。主要问
题回答简明准确。在规定的时间内作完报告。
指导教师
年
月
日
1、 需求分析
1.1、直接插入排序
思路:设有一组关键字{K1,K2,…….,Kn},排序开始变认为 K1 是一个有序的序列,
让 K2 插入到表长为 1 的有序序列,使之成为一个表长为 2 的有序序列, 让 K3 插
入到表长为 2 的有序序列,使之成为一个表长为 3 的有序序列,依次类推,最后让
Kn 插入上述表长为 n-1 的有序序列,得到一个表长为 n 的有序序列.
1.2、希尔排序
思路:先取一个正整数 d1(d1=1),即所有记录成为一个组为此.一般选 d1 约为 n/2,d2
为 d1/2,…….,di=1
1.3、快速排序:(递归和非递归)
思路:以第一个关键字 K1 为控制字,将[K1、K2、….Kn]分成两个子区,使左区
的有关键字小于等于 K1,右区所有关键字大于等于 K1,最后控制居两个子区中
间的适当位置。在子区内数据尚处于无序状态。
将右区首、尾指针保存入栈,对左区进行与第(1)步相类似的处理,又得到它
的左子区和右子区,控制字区中。
重复第(1)、(2)步,直到左区处理完毕。然后退栈对一个个子区进行相类似的
处理,直到栈空
分区处理函数 hoare
思路:首先用两个指针 i、j 分别指向首、尾两个关键字,i=1,j=8。如对(46、56、
14、43、95、10、19、72)。第一个关键字 46 作为控制字,该关键字所属的记录
另存储在一个 x 变量中。从文件右端元素 r[j].key 开始与控制字 x.key 相比较,
当 r[j].key 大于等于 x.key 时,r[j]不移动,修改指针 j,j--,直到 r[j].key
#include
#include
#include
2.2 、ADT
struct element
{
int key;
}list[20];
struct rnode
{
int key;
int point;
};
2.3、各种操作函数:
(1)创建一个数组函数:int creat();
(2)输出数组函数:void print(struct element a[20],int n);
(3)保存函数:void save(struct element a[SIZE],int n, char fileName[] )
(4)直接插入排序函数:void insert_sort(element a[], int n)
(5)希尔排序函数:void shell(struct element a[20],int n);
(6)快速排序函数(分区处理函数):int hoare(struct element a[20],int l,int h);
(7)非递归的快速排序函数:void quick1(struct element a[20],int n);
(8)递归的快速排序函数:void quick2(struct element a[20],int l,int h);
(9)堆排序(调整堆的函数):void heap(struct element a[20],int i,int m);
(10)堆排序(主体函数):void heapsort(struct element a[20],int n);
(11)时间函数:start = clock();end = clock();
2.4、主函数
Void main()
{
接受命令(选择要执行的操作);
处理命令;
输出结果;
}
3、 详细设计
3.1、程序源代码:
#include
#include
#include
#include
#define SIZE 1000000
struct element
{
int key;
}list[SIZE];
///////创建一个数组////////
int creat()
{
int i,n;
int num;
n=0;
printf("请输入元素个数:");
scanf("%d",&num);
for( i = 0;i < num; i++ )
{
list[n].key = rand() % 10000;
n++;
}
return(n);
}
/////////////输出数组/////////////
void print(struct element a[SIZE],int n)
{
}
int i;
for(i=0;i