排序综合-课程设计报告

  • 格式:docx
  • 大小:135.86 KB
  • 文档页数:24

下载文档原格式

  / 24
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程设计

课程设计名称:专业班级:学生姓名:学

号:指导教师:

排序综合0000000000000 0000000000000 00000000000000 00000000000000

课程设计时间:2010621 -2010625

计算机科学与技术专业课程设计任务书

说明:本表由指导教师填写,由教研室主任审核后下达给选题学生,装订在设计(论文)首页

信息科学与工程学院课程设计成绩评价表

信息科学与工程学院课程设计成绩评价表课程名称:数据结构课程设计设计题目:排序

1、需求分析

1.1、直接插入排序

思路:设有一组关键字{K1,K2,…….,Kn},排序开始变认为K1是一个有序的序列, 让K2插入到表长为1的有序序列,使之成为一个表长为2的有序序列,让K3插入到表长为2的有序序列,使之成为一个表长为3的有序序列,依次类推,最后让Kn插入上述表长为n-1的有序序列,得到一个表长为n的有序序列.

1.2、希尔排序

思路:先取一个正整数d1(d1=1),即所有记录成为一个组为此.一般选di约为n/2,d2 为

d1/2,…….,di=1

1・3、快速排序:(递归和非递归)

思路:以第一个关键字K1为控制字,将[Ki、K2、….K n]分成两个子区,使左区的有关键字小于等于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

r[i].key小于等于x.key时,r[i]不移动,修改指针i, i--,直到r[i].key

1.4、堆排序

思路:把n个记录存于向量r之中,把它看成完全二叉树,此时关键字序列不一定满足堆的关系。堆排序大体分为两步处理:

初建堆,从堆的定义出发,当i=1、2、。。。。、[2/n]时应满足ki<=k2i和ki<=k2i+1. 所以先取i=[n/2](它一定是第n个结点的双亲编号),将以i结点为根的子树调整为堆,然后令i=i-1,将以不结点为根的子树调整为堆。此时可能会反复调整某些结点,直到i=1为止,堆初步建成。

堆排序,首先输出堆顶元素(一般是最小值),让堆中最后一个元素上移到原堆

顶位置,然后恢复堆。因为经过第一步输出堆顶元素的操作后,往往破坏了堆关系,所以要恢复堆;重复执行输出堆顶元素、堆尾元素上移和恢复堆的步骤。

2、概要设计

2.1、头文件

#i nclude

#i nclude

#i nclude

#in clude

2.2、ADT

struct eleme nt

{

int key;

}list[20];

struct rnode

{

int key;

int point;

};

2.3、各种操作函数:

(1)创建一个数组函数:in t creat();

(2)输出数组函数:void prin t(struct eleme nt a[20],i nt n);

(3)保存函数:void save(struct eleme nt a[SIZE],i nt n, char fileName[])

(4)直接插入排序函数:void in sert_sort(eleme nt a[], i nt n)

(5)希尔排序函数:void shell(struct eleme nt a[20],i nt n);

(6)快速排序函数(分区处理函数):int hoare(struct element a[20],int l,int h);

(7)非递归的快速排序函数:void quick1(struct eleme nt a[20],i nt n);

(8)递归的快速排序函数:void quick2(struct eleme nt a[20],i nt l,i nt h);

(9)堆排序(调整堆的函数):void heap(struct element a[20],int i,int m);

(10)堆排序(主体函数):void heapsort(struct element a[20],int n)

(11)时间函数:start = clock();e nd = clock();

2.4、主函数

Void mai n()

{

接受命令(选择要执行的操作);

处理命令;

输出结果;

}

3、详细设计

3.1、程序源代码:

#i nclude

#i nclude

#i nclude

#in clude

#defi ne SIZE 1000000

struct eleme nt {